Please correct me if I'm wrong, but that's how I've always understood it. All I know is that the netplay in TF2 is fun whereas UT3 seems like a chore.
IANA engine developer, but I do know a decent amount about this subject.
Compensating for hitscan weapons client-side is no big deal. Take the ping, rewind the game state on the server, see if the player had a hit on the rewound time. Very few disadvantages, the only important one being you appear to get shot behind a wall. But you weren't on the other player's screen. There's also getting killed when you thought you shot first, but in reality, you didn't shoot first.
Projectile weapons, however, simply can not be done without some sort of visual side effect. If you simply do the same as the above, the projectile will have already traveled a distance. So you have to spawn the rocket a certain distance away from the player.
There's another way to do it, which is what's used in Unlagged in Quake 3, the side-effect of that is rockets will appear to stick in walls instead of blowing up right away. I'm not 100% sure on the details.
Out of both methods, I much prefer just having a lag on firing projectile weapons. I don't think the tradeoff is worth it. Valve may do something else, but there is no perfect solution. When there's a delay of ~200ms between firing and response, all you can do is hide it somewhere where it'll hopefully not be noticed.