That's possible. It shouldn't be in init.cpp either. Init contains all kinds of stuff that is unnecessary for the RPC client.

Using a bitfield still implies knowledge of the type of clients, just in another format. It does need to know about the GUI so it can disable -daemon, for example. I'm not sure this is important enough to warrant a lot of thinking/planning though.