Lag compensation
Team Fortress 2, being built on the Half-Life 2 engine, is generally configured to use Lag Compensation. [1]
This is the technical reason behind cases where players may believe they were "shot through a wall" (especially by Snipers), and may also explain a majority of perceived facestabs.
In a nutshell, when a high-latency (high-ping) player attacks, the server temporarily "rewinds" its copy of the action in order to compensate for their lag. For example, the enemy Sniper shoots when he sees your head, at that moment you and most other players may believe you successfully ran behind a wall. When the server receives the fire message from the Sniper, it "rewinds", finds out you ought to have been hit, and then deals damage, leading to the appearance of being "killed through a wall".
This is an intentional engineering and design decision, a tradeoff to enhance the realism of attacks at the expense of the realism of taking damage. Were lag compensation disabled, many players would have cause to complain that they shot the enemy without inflicting any damage.
Exceptions
Projectile weapons such as rockets, grenades, and flares are not lag-compensated. It is not clear whether the Syringe Gun or Flamethrower are lag-compensated. The Pyro's compression blast is also not compensated, making it increasingly difficult to use at higher latencies.
Spectators do not have lag-compensation. If you are spectating someone in first person, you are not seeing exactly what they are seeing. This is especially noticable with high-latency snipers, where you should expect to see unusual shots that may appear to miss or jerk about from your perspective.