Only thing that comes to mind after reading comments, is maybe small debug you can try.

(just for testing all is ok and freed)
1. Add to interface section a new variable to main unit for example SprCount: integer;
2. before Engine.Move; put command SprCount:=0;
3. after Engine.Move; place some code that prints SprCount. This could be form.caption, label or canvas.
4. place inc(SprCount); code to onMove event of every object that spriteengine uses. Place it as first line before any if/for or other statements.

Result:
If SprCount keeps growing up you will know something is not freed. At that point you can remove step 4 code from objects you don't suspect and test again.
If SprCount is stable and steady, then the problem may lie deep in DelphiX or something else.