Dear Patrick,
In some markets you can't afford to "hang up" and other unwanted behaviour. In order to avoid situations like this, you have to use specific methodology when you are designing an embedded product.
One simple way of thinking about that is to assume that software is going to fail. When **bleep** happens, what are you going to do about it? Then you write recovery procedures, etc, etc.
The flash protection and watchdog timers (COP) are part of the design technology regarding embedded systems. I suggest that you look for proper literature in order to understand better what we're talking about.
Some useful texts: anything from Jack Ganssle www.ganssle.com, textbooks about software engineering would be nice too.
Regarding your specific issues, COP could be used along with proper code to assure that the program is still operating. Basically you set a timeout and your program has to respond before this timeout that usually leads to a reset. But in order to work properly, you have to write your code in such a way that assures that all processes will be covered by this check. Once you understand the mechanism and implement your software from the start to comply with this, it works fine.
Flash protection is necessary because sometimes the misbehaviour of the software could try to (e.g.) erase your flash. If the flash is protected it'll be harder or almost impossible to erase it accidentally. Notice that QD4 flash programming software must run from RAM, you'll find plenty of examples on the forum.
Good luck,
Celso