Basically, they force the student to think about the whole problem at once, design a complete solution, and implement it without making mistakes. If you screw up, you'll have a very tough time finding the mistakes, since the system doesn't tell you where the mistake might be. It prevents you from repeatedly patching your system rather than redesigning it, which is a big problem I see in a lot of programmers.
It's not good for the absolute beginners, but for people who know a little bit how to think about algorithms and data structures, and are trying to improve their code quality, it seems like a good exercise. I know I've had some rewarding experiences debugging code by thinking about it; using a debugger, while easier, seems generally less satisfying.