They basically allow you to tag on values to handles, through a global gamecache.
An example of how to use them
function Knockback takes nothing returns nothing
local timer ThisIsAnotherHandle = GetExpiredTimer()
local real r = GetHandleReal( ThisIsAnotherHandle, "thisisastring" )
endfunction
function KnockbackInit takes nothing returns nothing
local timer ThisIsAHandle = CreateTimer()
call SetHandleReal( ThisIsAHandle, "thisisastring", 999999999.999 )
call TimerStart( ThisIsAHandle, 0.001, true, function Knockback )
endfunction
Note that i named the variables so that theyre easy to figure out what goes where
Also, note that instead of having a seperate function for Lightning, Unit, Group, and all the works, there is SetHandleHandle, but you have to get the individual types, as handles themselves ( not child-types however ) arent very useful on their own
PS. To clean up the functions, in the [STOP, TIMER!] part of your timer function, along with PauseTimer and DestroyTimer ( above DestroyTimer, though ), put FlushHandleLocals( timer ), where timer is a timer.