Something like `getutxos` or this proposal could be implemented as an
external application or script, instead of having to integrate
everything into bitcoind.

Right, although getutxos needs access to the UTXO set which bitcoind already has. An external plugin would have to recalculate it from scratch which seems redundant.

However there are many other useful services that could be added in such a way, like -txindex or the nLockTime storage facility we talked about the other day.
 
Bitcoind would need a local interprocess message bus for that

Maybe, that feels like it could be overkill though. Probably just something like

./bitcoind -servicecookie=<long random string> -allowextservices=127.0.0.1/8

and then any program can connect to bitcoind as normal, send "registersrv" with the cookie and a list of command ids it's interested in, maybe a service bit to set, and start receiving those messages wrapped in a new structure that gives some kind of client ID (like IP address). So any library that can do the basic P2P protocol could then be extended with not much code to get a multiplexed stream of messages from different clients.

An additional standalone program can then bridge this mechanism to running a shell command for particular messages, though given the history of shell based exploits I'd feel safer with something that doesn't do that ....