So the raw transaction API has to reference the local wallet? You can't just put arbitrary data in that and expect it to work? I'm thinking of a hypothetical third party wallet that keeps track of it's own bitcoin keys, and then tells the bitcoind server to broadcast a raw transaction involving them.
Yep, that will work perfectly fine. The raw transaction apis allow you to specify everything you need to create, sign, and broadcast a transaction. It does not require the use of the wallet. With signing, you can specify the private key and the referenced outputs. If you enable the txindex, you don't need to specify the referenced outputs.
I don't know the technical details of the transaction operations, but Armory (which maintains it's own private keys) uses the Bitcoin client (bitcoind or Core) to broadcast transactions and for the block chain data as well.
Armory doesn't use the RPCs. It actually connects to Bitcoin Core through the p2p network in order to broadcast the transactions.