The callback model can get a bit hairy when you have to code logic that can result in totally different content being returned. For example, if you have a system that processes some form input and takes the user to different pages depending on the data submitted. In these situations, it's easy to end up coding a spaghetti of includes and redirects, or putting what are really multiple pages in the same file.
This is pretty much what I've stepped into. I need to take one of our web sites apart and put it back together again for the next version. I'm trying to decide how best to do that. I think for now I'm going to stick with Perl and Mason, but I want to understand other approaches and learn what I can from them.