Jurgen Klopp's men looked set to tie after surrendering an early lead, but kept themselves mathematically in the Bundesliga chase thanks to late heroics from Lewandowski
Lukas Piszczek had given his side the advantage in the second half, but the hosts never submitted and were worthy of the draw thanks to Alexandru Maxim's equalizer, only for the Poland international to swoop in the dying minutes.
With both sides impressing in attack and less so at the back, the result was an open, action-filled first 45 minutes. BVB was the first team to threaten the scoreline, as Marco Reus was given a golden opportunity when played through by Mario Gotze. The forward had just Sven Ulreich to beat, but in trying to round the keeper was denied by an outstretched leg.
Reus was again the man who threatened most in yellow. The youngster was played through by a wonderful pass from Lewandowski, and from wide out tried an audacious chip to fool Ulrich. The keeper was completely beaten, but breathed a sigh of relief when it fell the wrong side of the post. Unable to convert in front of goal, Reus nevertheless played a big part in establishing the away lead.
The forward was fouled by the left touchline, and picked up the ball himself to whip in a free-kick. The delivery was pitch-perfect, as was a delicate glancing header from Piszczek that floated into the corner of the net. Stuttgart protested, incensed that the foul was given in the first place; but it was to no avail, and it was Dortmund which took a slightly fortunate advantage into the interval.
Stuttgart continued to press, and again went agonizingly close thanks to Maxim. His free kick was turned onto the post by Martin Harnik, and with the rebound Antonio Rudiger thought he had equalized. It was not to be, however; Mario Gotze came to the rescue of his side with a fantastic clearance off the line, somehow preserving BVB's slim lead. Despite the youngster's heroics, the pressure was building to an unbearable level for the visitors, and the leveller looked inevitable.
With 30 minutes left to play, the home team finally found the breakthrough. After impressing so much with the dead ball, Maxim showed what he could do in open play; taking down a loose ball and striking with precision past Weidenfeller to make it 1-1. Just as things were looking up for Stuttgart, it was dealt a blow; Neidermayer's bloodthirsty challenge on Gotze earned a second yellow for the defender, meaning his side would have to play the final 20 minutes a man down.
Dortmund continued in search of the winner, and with eight minutes left was vindicated. A tired home defense was stretched by the overlapping Piszczek, and his low cross was smashed home by Lewandowski to break Stuttgart hearts.
BVB continues four points clear of Leverkusen as it occupies second place, while the unlucky hosts stay in 12th.