Especially one that will relaunch the app when it's done.
Ideally, you'd want a system-level daemon that downloads and preps updates in the background, and either waits until the system is idle (I think Apple has some tech like this already for running Time Machine backups), with pending updates optionally installed on system shutdown (am I shutting down to save on battery, to restart, or because I'm about to leave the office and I don't care how long it takes for the system to shut down).
I think Kelly Sutton (of the late layervault) figured this out with his fork of sparkle, called "autosparkle" - https://github.com/layervault/Sparkle . I haven't personally integrated it into my app yet, but supposedly it makes updates a much more silent process - which is really important for 'always-on' tray apps like layervault was, or the one I'm making.
Ideally, you'd want a system-level daemon that downloads and preps updates in the background, and either waits until the system is idle (I think Apple has some tech like this already for running Time Machine backups), with pending updates optionally installed on system shutdown (am I shutting down to save on battery, to restart, or because I'm about to leave the office and I don't care how long it takes for the system to shut down).