Modifying the launched program is not an option - after all, that's the whole point of portable launchers - to cleanup after application, that doesn't do it itself (even when it's open source, modifying it is not a good idea, because you would need to update the code everytime you download a new version + plus you would need to setup you machine for the right compiler).
Anyway, I have found a partial solution and it's surprisingly simple. All that I needed to do is to create a window and now, the launcher gets 5 seconds (default Windows value, can be changed in HKEY_CURRENT_USER\Control Panel\Desktop) to cleanup, which should suffice most of the time.
System::Call `kernel32::GetModuleHandle(i 0) i.R3`
System::Call `user32::CreateWindowEx(i 0, t "STATIC", t "", i 0, i 0x80000000, i 0x80000000, i 0x80000000, i 0x80000000, i $HWNDPARENT, i 0, i R3, i 0) i.R1`
But it would be nice to be able to control it via the message loop. Will do more experiments.