Lutz,
It sounds like you should look at your start scripts and make them a bit more resilient, such that they handle a start when the process is already running and then remove any "un-monitor after failure" logic from your monit config.
If the "start" process throws failures, monit will give up and not monitor the process (iirc.) If you configure it to umonitor after N failures, it will become unmonitored.
I like to use pid files e.g.
check process httpd with pidfile /var/run/httpd/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
If I manually restart apache, monit's cool with that. My start stop scripts handle different scenarios. If you can't control the start/stop scripts, you could also create a script to better handle start/stops for monit to use. I have this one program that becomes unresponsive and hangs requests, so a PID check isn't sufficient. For that I have a bash script that tests the service using CURL with a timeout. Here is what that looks like
check program badactor-responsive with path "/var/actor/bin/check-actor.sh 7002" with timeout 3 seconds
if status != 0 then start
start program "/etc/init.d/actor start 7002" with timeout 10 seconds
I discovered this site with a bunch of monitoring plugins you might find useful:
Russ