First, if your apps must run without a user logging in, they must be services.
Now, when creating a service, you can decide how you want to respond to crashes. You can configure a service to restart in the case of a crash (see the service properties dialog).
If App1 crashes, do you have to stop App2, start App1, and then, 10 minutes later, restart App2? Or in that case, can you just restart App1 immediately?
From what you describe however, The control over start ordering appears complex enough that built in service configuration will not be sufficient, so you'll most likely need to keep that logic somewhere.
If it is ok for App1 to know about App2, you could have that logic in App1. App1 would then have 2 responsibilities (to run itself, and to manage the state of the App2 service).
On the other hand, you could have a third service that is just responsible for managing the lifecycle and health of App1 and App2 services. This is the watchdog that ChrisBD suggests.