World champion Hamilton benefited from a chaotic start and a safety car period caused by a heavy crash by Renault's Kevin Magnussen, who was taken to hospital with an ankle injury, to rescue an unlikely podium place.
The result means Hamilton stays top of the drivers' standings, nine points ahead of Rosberg, who collected his first win in Spa-Francorchamps, his sixth of the season and the 20th of his career.
‘It was a great weekend and I'm very happy with the result,’ Rosberg said.
‘Congratulation to Lewis. From last to third must have been pretty impressive. It is great to get the win, it is a legendary track. Lewis starting at the back made it a lot easier and I'm sure he will back at Monza (for next week's Italian Grand Prix).’ For Hamilton, who had taken grid penalties after several engine component changes, third place was akin to a victory.
‘I have changed three engines so we are ahead of the others and that is great. It has been a remarkable day and a great race,’ he said.
An eventful race saw Red Bull's Max Verstappen and the Ferraris of Kimi Raikkonen and Sebastian Vettel come together on the first turn, and continued with Magnussen's crash and several overtaking incidents.
Rosberg though was able to stay out of trouble from pole and took the chequered flag 14.113 seconds ahead of Red Bull's Daniel Ricciardo.
In a turbulent start, Verstappen, on the front row alongside Rosberg, was surprised by the Ferraris and then was squeezed out on the inside on the first turn. He had nowhere to go and shunted Raikkonen, who was sandwiched between team-mate Sebastian Vettel and the Red Bull.
All three had to come into the pits for repairs, with the Ferrari team also having to put out a fire under Raikkonen's car as he was fitted with a new wing.
Toro Rosso's Carlos Sainz skidded out with a shredded rear tyre to end his race, while an action-packed opening spell continued when Magnussen lost control of his Renault and crashed heavily into tyre barriers at Eau Rouge.
Magnussen was led away limping with an ankle injury, his car wrecked, while the safety car came out.
The red flag then came out to halt the race while the barrier on turn four was repaired, Rosberg at this stage ahead of Ricciardo and the Force India of Nico Huelkenberg, with Hamilton fifth behind McLaren's Fernando Alonso, who had started last.
Dutch teenager Verstappen kept the thousands of Dutch fans, many clad in orange, on their feet in the stands as he fought tough battles with both Raikkonen and Vettel.
Raikkonen and Verstappen touched while fighting for 14th place, when the Ferrari driver had to go wide and cut a corner while attempting to overtake. A second attempt to get past was blocked by Verstappen, with both incidents resulting in angry radio exchanges from the Finn.
Hamilton, who was meanwhile up to third on lap 18 after overtaking Alonso and Huelkenberg, pitted on lap 22 of the 44 laps with soft tyres, and again on lap 33 with medium. He got back ahead of Huelkenberg but could not get close enought to challenge Ricciardo.
Huelkenberg and team-mate Sergio Perez were next up, Vettel recovered to finish sixth, with Alonso seventh ahead of Valtteri Bottas in a Williams, Raikkonen and Felipe Massa in a Williams.