Here's my initial shot at a multipage cart module (actually it's my second, but my first was a complete custom rewrite, doesn't use the panes system and is quite separate from ubercart).
Basically what I've done is used the form_alter hook to render the checkout form, but depending on the page you are on, only a subset of the panes are visible.
The checkout is constructed by specifying pages which have panes on them. I've sort of started doing an admin interface for this, using drag and drop. But I figured it's more important to have the multipage checkout actual be complete-able, rather than having a shiney backend.
The main problem I have had is that the current checkout form only allowed the referrers 'cart' and 'cart/checkout/review' (a few lines into uc_cart_checkout_form() )
This was a problem, as the multipage checkout has urls like 'cart/checkout/billing_details' etc, and I didn't really want to have the current page determined by session or post variables or anything.
So I've included a patch that basically defines a hook that allows other modules to extend the set of valid referrers for the checkout. I'm not really familiar with the contribution process for ubercart (or any OpenSource projects, I've previously been a bit of a lurker ), so if someone could review it and let me know how I can submit it for inclusion that'd be great.
This module is by no means complete, but I thought I'd just get it out there for review and comments.
In particular I'd like comments on the need for the patch, as well as ways of making sure that the 'cart_order' session variable is persisted throughout the checkout process, as many panes have a freakin' annoying habit of messing with it in their processing function.
** UPDATE **
v.1 was broken I believe.
v.2 works for me, in that I can get through a checkout successfully. I've started work on a version of the quotes and payment panes that work with this multipage approach, because the default ubercart ones are so heavily reliant on JS that they don't really work in the multipage way.
The old JS from the checkout page is doing a bunch of request in the background too. They need to be weeded out somehow.
v.3 Implemented the current page via session rather than URL, so patch is no longer necessary. Seems to work well. Problems with Paypal doing queries in the background. I anticipate that a few of those payment modules will need to be dealt with, as they seem to be doing so much crazy JS stuff.
v.4 Works fine for me now, needs testing though. Created nice AJAX GUI for messing around with pages and panes at: admin/store/settings/checkout/edit/pages