Oh, in that case it is just to use the same timer for everything. In your case, you would have two stages. When the spell is cast, save the stage # under the unit (either a hashtable (if you are using hashtables) or an integer array (indexing)). It will be 1 at first. In the periodic trigger, you then will just check the stage to see what to do. Load the number for that spell instance, and if it is 1 you will just do the missile movement. Once the missile reaches the point, you won't deallocate the instance (yet). If you are using a hashtable, don't remove the unit from the group at that point. Instead, just increase the stage by 1 (to stage 2). Save all the data you need to do the knockback (and you can clear the data you don't need, or just leave it until the end of the spell, it doesn't matter)
Thus, you'll have a separate if-then-else. If the stage is 1, you'll do all the missile movement. If it is stage 2, you'll do the knockback actions. Once that part is over, you'll deallocate. Here is some pseudocode:
Events
Time - Every 0.03 seconds
Conditions
Actions
For each (SomeInteger) from 1 to MaxIndex do (Actions)
Loop - Actions
If (Stage[SomeInteger] equals 1) then do
Do missile stuff
If (distance is less than 100) then
Set Stage[SomeInteger] = Stage[SomeInteger] + 1
Else
If (Stage[SomeInteger] Equals 2) then
Do knockbacks
If (knockback is finished) then
Set SomeValue[SomeInteger] = SomeValue[MaxIndex]
Set SomeValue2[etc...]
Set SomeInteger = SomeInteger - 1
That is just pseudocode (not real code) and is lacking a lot of things to make it a proper spell. It just shows the structure. Hopefully that will help.