Rosberg’s delight was reduced by his Mercedes team-mate Hamilton’s damage-limiting and thrilling drive to finish on the podium after starting from the back row of the grid.
Australian Daniel Ricciardo finished second in his Red Bull.
The 31-year-old Rosberg, who started from his third successive pole position, led from start to finish in a 44-laps race fractured by accidents and incidents to secure his first victory in Belgium and his sixth of the season.
Hamilton, who started 21st after being handed 60 grid position penalties for taking three new power-units through the weekend, remains narrowly ahead of Rosberg in the title race with 232 points to his 223.
German Nico Hulkenberg finished fourth ahead of his Force India team-mate Sergio Perez, as the Silverstone-based team overhauled rivals Williams in the constructors’ championship.
Four-time world champion Sebastian Vettel of Ferrari recovered from a first-corner collision with his own team-mate Kimi Raikkonen to take sixth ahead of Fernando Alonso, who had started 22nd on the grid.
Valtteri Bottas was eighth for Williams ahead of Raikkonen and Brazilian Felipe Massa.
The race was halted in the early stages when Dane Kevin Magnussen crashed heavily, but he limped away from his wrecked Renault car with only a damaged ankle.