Tommie Hoban had fired the visitors into a shock 28th-minute lead but the game changed after Daniel Pudil was sent off for violent conduct after 63 minutes, and Peter Whittingham equalised from the penalty spot eight minutes later.
Nathaniel Chalobah was also dismissed for the Hornets after 71 minutes for a second bookable offence, and the Bluebirds grabbed the points in the dying seconds when Gunnarsson headed home a Craig Noone cross.
Nigel Pearson's Leicester stay top on goal difference after Andy King's 10th-minute strike was enough to give the Foxes a 1-0 win over Brighton, for whom Ashley Barnes had a 53rd-minute penalty saved by Kasper Schmeichel.
Dougie Freedman's departure from Crystal Palace, to become Bolton's new manager, was confirmed earlier in the day and Mark Davies struck an injury-time equaliser to rescue a point for the Trotters in a 2-2 draw at Wolves.
Benik Afobe had put Bolton in front after 21 minutes but a double from Kevin Doyle, who scored in the 27th and 30th minutes, looked to have given Wolves the points until Davies slammed home from the edge of the box.
Freedman's former side Crystal Palace also had to settle for a point in a 1-1 draw against Barnsley at Oakwell while Paul Jewell's future as Ipswich manager looked bleak after his side blew an early lead to lose 2-1 to his former employers Derby at Portman Road.
To make matters worse for Jewell, he saw his side slump to the bottom of the table after Peterborough pulled off a shock 3-1 win over Huddersfield.
Chris McCann headed the winner six minutes into injury-time as managerless Burnley grabbed a 4-3 win over Bristol City while Marlon King scored a hat-trick as Birmingham fought back from 3-0 down to earn a 3-3 draw at Millwall.
Neil Warnock's Leeds stuttered to a 1-1 draw with Charlton at Elland Road, Blackpool staged a late comeback to see off Nottingham Forest 2-1 at Bloomfield Road, while Middlesbrough maintained their solid home form this season with a 2-0 home win over fellow promotion hopefuls Hull.