I think the ideal solution would increase the modularity of the reference code by completely splitting the functionality bitcoind and Bitcoin-Qt. Bitcoin-Qt should be a UI and wallet manager only, with no blockchain or network managing functions and bitcoind should remove the corresponding UI features. Bitcoind should be able to serve alternate UI clients, like Armory or a theoretical bitcoin-curses, directly.
+1 - I was literally about to say just this, but then I saw "Warning - while you were reading a new reply has been posted. You may wish to review your post" and what I wanted to say, right before my eyes.
Bitcoind needs to provide many of the services that for example BlockChain.info provides, such as the unspent outputs of arbitrary addresses.
Each instance of Bitcoind needs to allow a client to subscribe to its view of the network in the form of a "sequential events" subscription. Everything that a Bitcoind node perceives (such as an incoming block, or a confirmed transaction, or blocks became orphan and/or transactions became unconfirmed) needs to be given a log serial number, and a client should be able to connect and ask "Tell me everything that has happened since LSN 1234567".
Bitcoind should have RPC calls to serve bitcoin knowledge over the network (obviously it does, and I feel there should be more, and can articulate). I would love to just run MY OWN bitcoind on my own network, so I have one bitcoind node I trust, and then point as many instances of Armory at it as I wanted, over the network, as though Armory were a thin UI for it.
A client/server UI makes a huge amount of sense. Then core devs can focus on the backend and others can create various interfaces including POS interfaces, or protocol interface layers etc.
This would also allow for a much simpler Electrum server install. I believe if bitcoind had an "address history" rpc call then it would be enough to support Electrum server as a thin layer over top and not need a full MySql/Abe/patched install. I was looking thru this yesterday wondering if I could create an "address history" call.
Right now, due to insufficient rpc calls, it's a fairly major bit of setup to run an Electrum server but instead with a small protocol layer it could be very easy for any bitcoind to also be an Electrum server.
edit: I didn't know it, but this is already taken care of in 0.8.0 pre-release and with the new SPV Electrum server install it's already this easy.