Unfortunately, to reduce the amount of data that has to go over the pipe, bullet effects are rendered on the client side. You don't have a choice but to lead the target.
That's one of the reasons that Quake 3 and Unreal Tournament feel so much better -- they don't fool you into thinking that you've hit someone. When you see a railgun or pulse rifle bolt, you're seeing where the server knows that it is, not where your client thinks that it is.
Another issue with a lot of games -- especially the Battlefield games -- is that the game fools you into thinking that you're not lagging out. If you have a sustained lag spike, you can still run around and shoot. You can walk up to someone, unload an M418 belt into their head, then die and see them at 100% health, simply because the game made you think that it was still working fine. I'd rather see visual effects of lag than to have crap like that happen.
Seriously, I think that's one of the biggest fails when it comes to multiplayer shooters nowadays. It's strange how far we've come technologically while netcode seemed to peak in 1999 and then steadily start getting worse (notable exception is the Unreal Tournament series. UT3 was far being worthy of its title but it at least played very smoothly online).