Thanks for the replies, they've clarified my thinking and helped me formulate my real question :-)
Continuing with squeaksource as an example, in a hypothetical simplified implementation it might use a model consisting of a collection of projects & users. Each project would contain a list of packages with each package having a list of package versions. With my limited knowledge of Pier a couple of implementations seem possible:
1) Create a Pier hierarchy of pages which mirror the model and potentially duplicate the data within it
2) Use the Pier page hierarchy as the model
3) Use the model to dynamically create Pier pages during a request.

As I see it there are problems with all three approaches:
Solution (1) duplications data, with all the inherent issues around synchronising the two object hierarchies
Solution (2) mixes model and view.
Solution (3) also mixes the model and view and would seem to subvert the intention and elegancy of Pier.

Perhaps the solution is to mix Pier and a more 'traditional' seaside approach, where the view would reflect off the model when the data is well structured, and Pier components would be used in places where the content is more free-form.  However this implementation would seem complex as the URL handling will be shared between Pier and 'traditional' seaside components. For example /projects/gofer/wiki/anotherpage would split the URL handling between the model handling the '/projects/gofer/wiki and Pier handling wiki/anotherpage.  Also the data would potential reside in two places - the Pier kernel and the model - though my understanding of how pier persists it's data is still at the very early stages.

Hope this makes sense. Any thoughts?

Nick