I have two reasons for wanting to do a top-down approach.
1) By the building from top to bottom, it forces us to think more about what features our underlying model should have. This is the same principle behind test-driven design.
2) We have something executable that we can build, use, and demonstrate with, even if it doesn't provide full functionality at first. An executable provides us a structured way to examine the functionality and design of our program without having to turn to the source code, which is especially useful for dealing with customers who don't program or haven't already seen the source code.
Also, a top-down approach doesn't mean we ignore the model. As said above, top down will make us think about what we want our model to do. So, we can specify, or implement mock, objects to hold a foundation while we build the top. Then when we're satisfied with that layer, then we take a step down to implement our mock objects, and this becomes our new top layer, thus iterating the process. If we work in this way, we will have to think about the model a great deal, and we'll be thinking about it from the point of view of a client, which is what we want.