In traditional software development the design phase happens in the beginning of the project, takes quite a long no-coding or little-coding time. At the end of the phase, the design is considered being more-or less frozen. It might sound logical to plan ahead in a detail, however, I have often seen that design changes quite a lot during the development period and not having space for incremental design can hamper things during development. Therefore attempts to fix the design well in advance often lead to the wrong assumption and sub-optimal solutions.
The XP practice of Incremental Design is a reflection on the fact that the best design emerges from the trial and error. Incremental Design does not prohibit thinking about the highest levels of the system. However, it encourages the team to plan in detail only what is going to be constructed soon and to make the design evolve iteration by iteration based on the current customer priorities and discovered technical limitations. We have done this in the past on diff projects and it has worked really well. One might need to educate the customers to help them understand the incremental design. I have seen lots of customers ask for designs to be done upfront but once they understand the value of incremental and iterative design, customer will be more than happy to work iteratively.