Hamilton now leads Bottas in the championship by 73 points with just 130 remaining. Leclerc is 107 points behind the British driver.
Max Verstappen finished fourth ahead of Red Bull team-mate Alex Albon, who started last after he crashed out of qualifying.
"What an effort, guys," said a jubilant Hamilton on the radio. "What an incredible job. That is exactly what we needed. We never give up."
Ferrari had already got themselves into a needless mess before Vettel retired with an engine failure on lap 28.
Vettel got the jump on pole-sitter Leclerc on the long drag down to the second corner here, but a curious pre-race arrangement had Leclerc calling for the roles to be reversed.
— Formula 1 (@F1) September 29, 2019
Seemingly it had been agreed that if Vettel benefited from the slipstream and moved ahead of Leclerc off the start line, he would have to concede the position.
Ferrari were on the radio to tell Vettel to let Leclerc by, but the four-time world champion resisted the order.
Leclerc protested from his cockpit. "You put me behind and I respected everything," he said. "We will talk later."
The Ferrari pit wall were on to Vettel again, but again the German did not want to budge, fearing that he would be exposed to Hamilton if he slowed down.
Leclerc was the first to stop on lap 22, but instead of calling in Vettel the next time around, as would be the expected protocol, Vettel was left on old tyres as his team-mate lit up the time sheets on new rubber.
Four laps after Leclerc pitted, Vettel was eventually stopped, and by the time he emerged he had fallen behind his team-mate and into a net second.
Ferrari had got their wish, but just moments after leaving the pits, Vettel broke down with an engine failure. "Bring back the f****** V12s," yelled Vettel with Ferrari blaming his retirement on the hybrid technology.
It was then to get worse for the Scuderia. With Vettel's broken down machine in a precarious position, the virtual safety car was deployed to slow down the field, allowing Hamilton, who had yet to pit, a free stop for tyres and the lead of the race.
George Russell then crashed out in his Williams and the full safety car was put on track. Ferrari decided to stop Leclerc and put him on new tyres for the remaining 20 laps.
But their decision saw him lose a position to Bottas, and on a track where overtaking is nigh-on impossible, Leclerc was unable to pass the Mercedes driver.
Hamilton crossed the line 3.8 seconds clear of his team-mate to claim his ninth win of the season and end Ferrari's three-round winning streak.
"It is incredible to have this result considering how quick (Ferrari) were off the start," said Hamilton.
"To keep up with them was an incredibly hard task."
Reflecting on his probable sixth title, the Mercedes driver added: "I try not to think about the championship and take it one race at a time.
"We don't want to stumble. It feels like a long time coming, but the first time, too, so that is why this win is special."
Leclerc added: "I will always trust the team but the tactic was me giving the slipstream and for us to be one-two, which happened, but then I don't know.
"I need to speak to the team to know the situation better."