Atlanta's rally came after Toronto lost goaltender James Reimer to an injury early in the second period.
The Thrashers earned only their second win since the All-Star break.
Giguere, who hadn't played since Feb. 16 while recovering from a lower body injury, replaced Reimer and lost the lead in the third before giving up Hainsey's game-winning goal.
Nikolai Kulemin and Phil Kessel scored first-period goals for Toronto.
The Thrashers and Maple Leafs are tied for 10th in the Eastern Conference with 63 points and both teams trail eighth-place Carolina by four points.
Reimer stopped 18 shots before he was shaken up early in the second period when he was hit on his helmet by the knee of Atlanta's Evander Kane, who was called for goaltender interference.
Reimer remained in the game for about 2 minutes before he skated to the bench and left the game with a 2-0 lead. There was no immediate report on the injury.
Giguere gave up Ladd's power-play goal only 23 seconds into the third period. Stapleton scored on a put-back past Giguere 15:24 into the third period to tie the game. Stapleton's rebound followed an attack by Zach Bogosian and Kane.
Giguere stopped 22 shots.
Before his injury, the 22-year-old Reimer had been a key to the Maple Leafs' surge since the All-Star break.
By contrast, the Thrashers had lost 16 of 19.
Notes: Kessel has 17 points in 20 games against Atlanta. ... Thrashers G Ondrej Pavelec was held out after leaving Friday's 2-1 shootout loss to Florida with an injury. Drew MacIntyre, recalled from AHL Chicago on Saturday, was Mason's backup. ... Stapleton's goal was his first of the season.