Ignoring the question of whether Widow and Hanzo are actually balanced, the main reason you see a ton of hostility towards them is because there's no scoreboard.
Because there's no way of actually evaluating performance (unless you go out of your way to micromanage the team, which almost nobody does or should have to do), peoples' judgement of other players is based solely on their class choice. Accordingly, when people are losing, they hit tab, check for the least meta pick on their team (usually Hanzo or Widow), and assume that's why they're losing - and when they're winning, they assume that they won in spite of that player.
Since everybody assumes that a non-meta pick drags them down, they get worked up whenever they see one. I've seen teams scream at god-tier Hanzos, but not say a word to the shitty Reinhardt on their team who mindlessly charges into the enemy team and gets killed. At this point, either the Hanzo ignores everybody, keeps playing extremely well, and gets blamed if they lose, or he switches and they still lose, and they assume it''s because they had a Hanzo on their team at some point. Nobody actually gets better in this scenario, but the cycle of meta worship continues.
tl;dr: Adding a scoreboard will create a lot less vitriol for offclasses. Why people continue to defend not having one is beyond me.
e: Another issue is that there's no "Big Teams" game mode. In a 12v12 TF2 match nobody cares if they have a shitty Sniper (unless there's a ridiculous number of them) because there's a ton of people to pick up the slack, but Overwatch matches only go up to 6v6 where having a guy who doesn't contribute is a huge deal. So even in QP you see a ton of meta worship.