After some toying, I've got it working perfectly as I imagined

[pascal]
Sprite = object
public
x,y,xspeed,yspeed,gravity,lastx,lasty,collision: integer;
solid: boolean;
img: TBitmap;
procedure Create();
procedure Destroy();
Collide: procedure of object;
Draw: procedure of object;
procedure DefaultDraw();
procedure DefaultCollision();
procedure LoadFromFile(F: String);
end;

...

procedure Sprite.Create();
begin
img := TBitmap.Create;
lastx := x;
lasty := y;
solid := false;
Collide := DefaultCollision;
Draw := DefaultDraw;
end;
[/pascal]
Then I can just change Sprite.Collide to something else from the main game unit (oddly enough, this was giving me errors from within the engine unit, but as Sprite.Create is always called, this works wonderfull).