Hello, just an 2 cents idea...
Application1 launches application2 and waits for it to finish.
Application2 is the real application used by the user.
When application2 needs to restart, it signals it to application1 by a tag in a file for example or by pipe communication, then finishes.
The application1 detects the end of the application2, reads the file or the pipe and if necessary restarts the application2.
This is a bit far-fetched, of course...