With Schalke losing 3-0 at Nurnberg on Sunday, Frankfurt could have moved three points clear of the men from Gelsenkirchen in the battle for fourth place had they beaten Stuttgart.
But the poor recent form which had seen Frankfurt earn just three points from their previous five matches struck again.
Stefan Aigner gave Frankfurt the lead after 17 minutes - their first goal in six weeks - but Vedad Ibisevic equalised with a penalty in the 48th minute and Georg Niedermeier gave Stuttgart the victory with his header 19 minutes from time.
Frankfurt remain fourth on goal difference, ahead of Schalke.
Borussia Monchengladbach climbed two places to seventh, just one point behind Frankfurt and Schalke, thanks to a 1-0 home win over Hannover.
The only goal came in the 36th minute from Luuk De Jong, who clipped a close-range finish beyond Ron-Robert Zieler after taking on a smart short-range pass from Patrick Herrmann.