Bell's TD came soon after scrambling Packers quarterback Matt Flynn fumbled while being tackled by safety Troy Polamalu. The Steelers recovered at the Packers 17 and scored five plays later.
Micah Hyde's 70-yard kickoff return to the Steelers 31 gave the Packers one last chance. Green Bay got to the 1, but after a Packers penalty the game ended when Flynn's pass to Jarrett Boykin sailed incomplete in the end zone.
The Steelers overcame a rarely-seen illegal batting penalty that negated a blocked field goal, and won after a roller-coaster second half.
Bell finished with 26 carries for 124 yards. The Packers' Eddie Lacy had 15 carries for 84 yards and two scores in a game featuring two of the league's top rookie running backs.
Steelers cornerback Cortez Allen returned an interception 40 yards for a touchdown and quarterback Ben Roethlisberger dashed through the snow for a 13-yard score.
It all happened in a wild second half, but those plays were overshadowed by the illegal batting call.
After the Steelers blocked the kick, a scramble ensued and the jostled ball ended up near the sideline, where Steelers defensive lineman Ziggy Hood poked it out of bounds. After conferring for a few minutes, the officials gave possession to Green Bay, ruling the Steelers never controlled the ball after the block and that it never crossed the line of scrimmage of the Steelers 5.
One play later, Lacy barreled into the end zone from 2 yards for a 21-17 lead.
Instead of sulking, the Steelers answered quickly.
Roethlisberger found Matt Spaeth for an 11-yard touchdown pass with 2 minutes left in the third. Fourteen seconds later, Allen made his leaping interception and ran untouched into the end zone.
The Packers roared back with a 22-yard field goal by Mason Crosby before John Kuhn's 1-yard touchdown run with 7:17 left tied the game at 31.
But the Steelers finally finished things off with Bell's touchdown run and the Packers' failed last-ditch throw into the end zone.
Flynn finished 21 of 39 for 232 yards and a touchdown making his fourth start in place of injured quarterback Aaron Rodgers, who has been out since fracturing his left collarbone on Nov. 4.
Linebacker Clay Matthews also left following a sack apparently re-aggravating a right thumb injury that kept him out of action for four games this year. Steelers receiver Emmanuel Sanders left with a knee injury. He had a 1-yard touchdown grab in the first quarter.