If you haven't already you should probably start with reading how some FPS style games do it. I imagine they already solve a lot of your problems ('lightspeed' bullets, etc.):
Source Multiplayer NetworkingLatency Compensating Methods...Quake 3 NetworkingUnreal Networking ArchitectureI think you are on the right track with some of your latter points but I do have a few suggestions (although take these with a grain of salt as I have yet to implement a multiplayer fps). A completely authoritative server is a good idea as it will limit cheating. Thus it should definitely handle more than just connections and in fact should simulate the whole game. The client should only be sending user input to the server (take a look at the data structure they use in the second article); for this to work the server has to simulate everything. You can use client side prediction to make the game feel responsive to the user whilst you await the outcome of the predictions. Also I'd use UDP for the transport if you're not already.