We already have a good mechanism: anonymous methods. I have writed a "Confirmation" dialog that, when OK, calls a reference to a method. It is way better than a callbak.
MyConfirmationDialog('Are you a good programer?', procedure(AResult: Integer)
begin
// handles AResult
end);
works like a charm.
When I have more a more complex scenario, than I use a Interface. Is a better approach that making a DataModule changing variables of main form.