
Goals from Serhou Guirassy and Nico Schlotterbeck just before halftime gave the hosts a 2-1 lead after Eintracht had taken a second minute lead through Can Uzun.
Teenager Samuele Inacio added a third goal in the 72nd before Jonathan Burkardt cut the deficit in the 86th.
Dortmund, who last won the league title in 2012, earned only their second win in the last five league matches.
With a game left to play, Dortmund, on 70 points, will finish in second place behind champions Bayern Munich. RB Leipzig, with a game in hand, are third on 62.
Eintracht, in eighth place, are now set to miss out on European football next season after having failed to win any of their last four games.