Sergio Perez took the chequered flag of a turbulent wet-dry race under the lights of the Marina Bay Circuit, while Max Verstappen's wait for a second world championship goes on for following an error-strew display.
Verstappen started eighth and finished just one place higher after he dropped to last when a wild move on Lando Norris backfired.
However, the Dutchman - 104 points clear of Charles Leclerc in the standings - will be crowned champion at the Japanese Grand Prix in a week's time if he wins and sets the fastest lap.
Leclerc finished second here, with Ferrari team-mate Carlos Sainz joining him on the podium. McLaren's Norris was fourth.
Hamilton will leave Singapore keen to erase the memory of a night where he made two uncharacteristic mistakes.
After losing out to Sainz at the start, Hamilton spent the majority of Sunday's race inhaling the Ferrari man's exhaust fumes. And on lap 33, he was in the tyre barrier.
Hamilton carried too much speed into the seventh corner and whacked the wall. He slipped his Mercedes into reverse - falling behind Norris but ahead of Verstappen - and attempted to soldier on.
But Hamilton's front wing was dangling off his Mercedes and orange sparks flew as he was forced to stop for repairs.
"I am so sorry about that guys," he said over the radio. "I f***** it up big time."
Hamilton dropped from fourth to ninth, and then with 96 seconds of the two-hour race remaining - which was delayed by 65 minutes following a downpour - he ran off the racing line at turn eight as he duelled with Sebastian Vettel.
That promoted Verstappen to eighth which then became seventh when the Dutchman passed Vettel on the final lap.
"I am pretty flat," said Hamilton. "It was a poor day, a pretty rubbish day. I am just looking forward to tomorrow.
"It all went out the fricking window when I locked up so my apologies to the team.
"Your heart sinks. I knew it was all over from then, but these things happen. I am not going to punish myself for a mistake. When you fail, you get up and try again, but it wasn't the greatest day."
Hamilton's team-mate George Russell will also be keen to banish the memories of Marina Bay. Russell qualified 11th - before he started in the pits following an engine change - and then collided with Valtteri Bottas and Mick Schumacher. He finished 14th and last.
Verstappen has been largely unstoppable this year. But against the backdrop of accusations that his Red Bull team has broken Formula One's salary cap - claims, if proven correct, that will bring into question the legitimacy of the Dutch driver's title triumph over Hamilton 10 months ago - Verstappen recorded his joint lowest finish of the season.
Following a fuel blunder in qualifying, Verstappen started only eighth, and then slipped to 12th after a poor getaway. He was up to fifth on lap 40 but overshot in a plume of white tyre smoke at turn seven after an ambitious move on Norris.
The Red Bull man wrecked his rubber and his resulting stop left him at the back before his late salvo to seventh.
"After yesterday you cannot ask for miracles," said Verstappen. "It's just a very frustrating weekend.
"We have five races left and a big lead, but I want to have good weekends every time.
"This one was really terrible. It started with yesterday's big f*** up. I take zero delight in today. You want to be competing at the front, not stuck towards the back."
Perez has been in Verstappen's shadow, but after usurping pole-sitter Leclerc at the opening bend, he controlled the race and crossed the line 7.5 seconds clear.
The Mexican faced a post-race investigation after he fell more than 10 car lengths behind the safety car on two occasions.
But at 1:44am local time, the stewards declared his victory stood when he was sanctioned with a reprimand and a five-second penalty for his two misdemeanours.