I think $wgUser is the last global we should get rid of, if we get rid of it at all. I later regretted inventing hideous syntax such as:
$popt = ParserOptions::newFromUser( $wgUser );
...now you can do the same thing with just
$popt = new ParserOptions;
I did it with a user parameter with a default of null.
Why not write a User::getParserOptions() method? Static methods are generally "hideous", as you put it. If the options are a property of the user (which, conceptually they are), why not make getting them a method of the user?
I think the current user needs to be a global and it should be used by the caller. Just because 99.9% of the time the method is going to be called with $wgUser doesn't mean we shouldn't support the 1 time in a 1000 when it isn't. Remember, these methods are used by extensions, not just the core code, so we really have no idea what people are going to want to do with them. I don't see what is to be gained by bundling them together, either, it just replaces lots of small globals with one big one - surely that's just a waste of resources?