You should not need to mark the game as "netgame" - just "multiplayer" should be sufficient. (Check the CCMD (map) in g_level.cpp for info) - that alone should fix quite a number of hacks related to disabling netcode.
What you do need, obviously, is some way for the second player to receive input.
The way I would suggest doing this is creating 3 CCMDs: console # <command>, +console # <command>, and -console # <command>
There's also gamepad considerations, where one gamepad can control player 1 and one can control player 2.
As for the renderer, I really am not sure the best way to handle that, to be honest, but I am not sure I would handle it in such a hacky way - especially considering the potential framerate loss.
One thing to consider about the software renderer - especially considering most screens are widescreen these days - the narrower your X field, the faster it goes. All calculations are done per-column and the Y-field is nothing more than texture bursts (with the exception of the span drawer, but that's a different story).