Backup goalie Jocelyn Thibault stopped 25 of 26 shots and Michel Ouellet also scored for the Penguins, who stopped a two-game losing streak.
Scott Mellanby scored for Atlanta, which has lost two in a row.
Staal scored the winner despite standing near the left-wing corner behind the goal-line and was not trying to shoot the puck.
Ryan Malone dumped the puck into the corner, and Staal was just trying to move it along behind the net while he was tied up with Atlanta defenceman Greg de Vries. The puck squirted toward the net and found a way to bounce off the outside of the goal post and the back of Thrashers' goalie Kari Lehtonen's skate and into the net.
It was Staal's 29th goal of the season, second-most among rookies.
Ouellet scored the game's first goal less than eight minutes into the game after shots by Gary Roberts and Evgeni Malkin were stopped by Lehtonen and the puck squirted to an open Ouellet to the right of the net. It was his 17th goal of the season.
That next goal was not scored until there was 13:42 to play, when Mellanby tied the game by putting in a rebound of a de Vries shot.
Thibault, who was making his eighth appearance in the team's last 18 games, made two of his best saves on back-to-back opportunities by Thrashers' sniper Ilya Kovalchuk late in the second period.
The Penguins had 28 shots, marking the first time in nine games Atlanta did not allow an opponent at least 30 shots.
The Thrashers have earned at least a point in their last seven meetings with Pittsburgh.
Notes: Penguins RW Colby Armstrong and C Maxime Talbot each left the game for a time early in the game because of injuries but returned later in the first period. ... Atlanta LW Jon Sim missed his first game this season. He had facial surgery Friday and is out indefinitely. ... The Southeast Division is the only one which Pittsburgh does not have a winning record against.