Beaten Dortmund lose touch with leaders
Borussia led 2-1 after 57 minutes with goals from Mats Hummels and Argentina forward Lucas Barrios, his eleventh of the season.
But the visitors, who had gone ahead after eight minutes with a Benjamin Kohler header, levelled through Sebastian Jung's deflected shot in the 65th minute before Alexander Meier pounced on poor defending to fire the winner nine minutes later.
Borussia stayed fifth with 36 points, nine behind leading pair Bayern Leverkusen and Bayern Munich, while Eintracht moved up to seventh with 31 points.
Promoted Mainz maintained their unbeaten home record by beating Borussia Moenchengladbach 1-0, Danish striker Bo Svensson scoring the only goal against the run of play in the 42nd minute when he snapped up a rebound.
Mainz are eighth with 30 points.