Hey deterium!
I've seen you teach that 'anti-leak event' for quite some time, and I thought this topic might interest you.
According to Antarif on wc3c (I think it was antarif), filters don't leak for events, only for groups. Maybe dig deeper into this statement?
Anyhow, I think I've seen this spell somewhere before Vercas? Was it you who over-used BJ functions?
Great improvements I must say. I'm gonna give you 3/5 for a good work and a nice intro (really explains alot).
As usually, I still have improvements

Here're some points (remember; this is
constructive critisim)
1: If your functions are private, why do you add the HL preffix to everything?
Maybe you don't know what 'private' really does, so I'm gonna go ahead and explain it to you.
See, if a function has the preffix private and is inside a scope, JassHelper converts the function's name to "ScopeName___[RandomDigit]___FunctionName".
So, in for example HLAction's case, the 'real' function name is "HolyLight___296___HLActions", and that makes the HL preffix quite unneccessary, right? "HolyLight___296___Actions" seems fair enough ("private function Actions")
(That 296 can be any number between 000 and 999)
2: You've forgotten to clean up texttag, and you never assigned and nulled the GetTriggerUnit().
There's been a discussion about whether or not to null handles, and the conclusion was that Yes, it's neccessary, because otherwise the handle's index may never be recycled if you don't.
3: Maybe consider to add a Setup section? It'll enhance user-friendlyness to a very high standard.
If you don't know what a Setup section is, either check out my time stop on the front page, or search for JESP and read the introduction text (before the document itself).
===== Edit ======
We're not nullifying the trigger/handle here, but we're nullifying the local variable which was holding it.
Nullifying isn't related to handles, that has DestroyBla()/RemoveBla().
(This probobly helps Thanathos aswell)
What he does basically cleans up the local which would never be accessed after being used...
Unlike other handles, triggers are never destroyed (ever) and thus, we don't need to null it. Handle variables are just pointers to index memmory, they're not 'holders' as you state.
If I remember correctly, every other handle is destroyed in some way, but triggers can only be disabled/enabled, nothing more.
Also, trigger handle is just a long integer pointing to some memmory index. Integers, as we know, does not need to be nulled.
If you want more reasoning I have a topic on this on wc3c, where Vexorian himself explained this (I'm too lazy atm to link it)