The "Dead" engine is used for a simple motive... you can't free the sprites while a .move(), .collision() or .draw() is running, you can set it do deaded, will be ignored in these loops, and when you call Engine.Dead after all work is done, all "deaded" sprites are freeing then.

This is my procedure on timer that i use almost all the time (i use a class to manage "game states" using only the sprite engine to render all)

// In
Input.Update;
SpriteEngine.Move(1);
States.DoRun;
// Out
If Screen.CanDraw Then Begin
SpriteEngine.Draw;
Screen.Flip;
End;
// Garbage
SpriteEngine.Dead;