Hamilton attacked his team-mate from the very first corner, as he tried to secure a first victory in Brazil, but after a dramatic first lap during which the pair almost touched, Rosberg was able to keep ahead.
Rosberg started from pole and won his second consecutive race at Interlagos – his fifth victory of the season – to secure runner-up place in the season standings with one race to run in Abu Dhabi.
Ferrari’s Sebastian Vettel finished third ahead of teammate Kimi Raikkonen. Hamilton moves to 363 points, with Rosberg on 297 and Vettel on 266.
“It was a great weekend for me here, of course everything is relative because of what happened in Paris,” Rosberg said on the podium.
Hamilton, who has never won in Brazil, faded towards the end with wearing tyres, and Rosberg took the chequered flag with a lead of 7.756 seconds.
“It was a good challenge from Lewis but I was able to control the pace,” Rosberg added.
“We saw Lewis dropping off a lot with degradation and that confirmed it was important to take care of the tyres.”
Hamilton said: “I had good pace but you just can’t overtake here. I killed my tyres and it is a shame because it is such a great track but you can’t get close enough to race.”
The race at Interlagos was run on a dry day free of rain, which is often a feature of the Brazilian GP outside Sao Paulo.