I think you have it backward. What is required is a wallet-less bitcoind: a program that takes care of participating in the P2P WAN network and maintains a local copy of blockchain that is quickly accessible. On the LAN side it should accept requests to inject transactions and make callbacks upon seeing interesting public keys mentioned over the WAN.+1000 - I AGREE - Thank God someone else sees this the same way I do.
Anything else is just an job security for the C++/boost/wxWidgets programmers and prolonging the opportunities to the hackers who endeavor to exploit the weaknesses of the current organically-grown client (because it would be a mistake to call it "designed").
May this thread be renamed "walletless bitcoind"!
Bitcoind should be a platform independent daemon that never handles private keys... ever. It simply provides the Bitcoin "client service" for everyone on the LAN, as well as speaks P2P to the other nodes.
And then the client of that service can be a UI, which has no support for mining or P2P comms or finding peers on IRC. It manages wallets, signs transactions, lets users keep track of their money. It depends on bitcoind to learn the balance of all the addresses it manages, and to forward signed transactions to the rest of the network.
With that separation of responsibilities, third party clients will be a much less monumental task, and Gavin's task of managing the bitcoind codebase and keeping it secure will become much simpler.
I was thinking if I made a 3rd party client, I would simply require bitcoind as a dependency, and modify bitcoind to add a couple important RPC function: a "getunspenttransactions" that takes a list of bitcoin addresses and returns a listing of which unspent transaction IDs are worth how many BTC. And a "submittransaction" that took a signed transaction for validation and forwarding (bitcoind would treat this the same as if it came from a peer via p2p).
This would be all bitcoind needs to completely function and do everything I'd want so I could write a new UI app (e.g. native to Windows, or one that stores privkeys on a smartcard or Arduino or other gadget). I don't want to re-implement all the code to do with mining and validating transactions in my UI app, bitcoind does this fine.
Because I believe bitcoind shouldn't handle wallets, I also believe the efforts toward wallet encryption are a waste of time. Same opinion about "multi wallets". Leave that to the client/UI.