Da würde mir persönlich nur ShellExecute einfallen (ist dann aber kein wirkliches Neustarten: erst würde das Programm ein zweites Mal ausgeführt werden und dann das erste geschlossen...):
Delphi-Quellcode:
uses ShellAPI;
...
procedure Button1Click(Sender: TObject);
begin
// vll würde hier Form1.OnClose oder so etwas bringen?
ShellExecute(Application.Handle, 'open', PChar(ParamStr(0)), nil, nil, SW_NORMAL);
Close;
end;