To again answer my own question. The problem was in the detour procedure declaration. It seems you cannot have the original parameters specified, but you have to use pointers instead of interfaces. This is probably due to differences between objectiveC and object pascal. You later "wrap" and thus cast the pointers to correct interfaces.
procedure touchesBeganDetour(self: id; _cmd: SEL; touches: Pointer; withEvent: Pointer); cdecl;
begin
DoNotifyTouchEvent(TNSSet.Wrap(touches), TUIEvent.Wrap(withEvent), teDown);
end;