With neither of their rivals Dortmund nor Bayer Leverkusen picking up wins, runaway league leaders Bayern Munich can extend their 12-point advantage at the top of the table when they host Schalke 04 later on Saturday evening.
Having lost 3-2 at Hamburg in September, Dortmund were stunned at their Signal Iduna Park home in front of 80,645 fans as Thorsten Fink's side once again got the better of the title-holders.
After losing 2-0 at home to Eintracht Frankfurt the week before, Fink admitted he was shocked by the result.
"That was totally unexpected. After the home defeat, I made it clear to the boys they had to play the ball forward more. We played well and deserved the win," he said.
Poland striker Robert Lewandowski put Dortmund ahead in the first half only to be sent off a quarter of an hour later as Hamburg roared back with two goals each from Son and Latvia's Artjoms Rudnevs.
"Hamburg had the better start and after they went 2-1 up, the game got hectic and wild," said disappointed Dortmund coach Jürgen Klopp.
"Robert was unlucky for his dismissal. At the end our strength and morale diminished against a strong Hamburg side," he added.
Amid reports here he is set to join Dortmund's rivals Bayern next season, Lewandowski hit his fifth goal in as many league games after 16 minutes.
Hamburg responded immediately with Rudnevs converting a superb cross from the left from Dennis Aogo just 60 seconds later.
The visitors then took the lead on 26 minutes when Son beat Germany defender Mats Hummels on the right, broke down the wing and cut inside stand-in left-back Sven Bender to unleash his shot into the far corner.
Lewandowski was then harshly shown a straight red card following a challenge on Norway midfielder Per Ciljan Skjelbred, while Hamburg's Dutch star Rafael van der Vaart was shown a yellow for angrily shoving the Dortmund star on 31 minutes to leave it 2-1 at the break.
The numbers were evened up when Hamburg's Dutch defender Jeffrey Bruma was shown a straight red for bringing down Marco Reus when he was clear on goal after 59 minutes.
But Hamburg recovered from that blow as Rudnevs headed home on 62 minutes and then Son's 89th-minute strike completed the rout of Dortmund as he turned in Marcell Jansen's pass to move Hamburg up to fifth.
Borussia Mönchengladbach last beat Bayer Leverkusen at home in 1989 and the hosts must wait another year to break the league's record for a winless run, but there was plenty of drama in their 3-3 draw.
The lead changed hands three times before an 86th-minute equaliser by 'Gladbach's Patrick Herrmann shared the points, while Leverkusen stay third in the table.
Hanover 96's Senegal striker Mame Diouf added to Hoffenheim's woes with a first-half winner in their 1-0 home victory, while Chelsea's Kevin de Bruyne, on loan at Werder Bremen, scored the final goal in his team's 4-1 win at Stuttgart.
Bottom side Greuther Fürth went down 1-0 at home to Wolfsburg, while Eintracht Frankfurt stay fourth despite their goalless draw at home to Nuremberg.