Peter Bosz's injury-hit side suffered a first defeat of their campaign against RB Leipzig in their most recent league outing, before drawing 1-1 with UEFA Champions League minnows APOEL last time out.
But goals from Nuri Sahin and Maximilian Philipp looked set to assuage Dortmund's woes, only for Frankfurt to rally and forge a remarkable comeback, leaving the visitors just one point clear of Leipzig and three ahead of Bayern Munich, who later won 1-0 at Hamburg to join Dortmund on top.
Bosz's insistence on playing a high-line backfired when goalkeeper Roman Burki – who signed a new contract at Dortmund on Friday despite making a costly error against APOEL – conceded a penalty just after the hour, Sebastien Haller converting from 12 yards.
And the comeback was complete in the 68th minute, Marius Wolf on hand to lash home his first Bundesliga goal moments after Lukas Hradecky had denied Christian Pulisic at the other end.
Both sides could have snatched all three points in the closing stages, with Burki and then Makoto Hasebe pulling off heroic blocks, as an enthralling encounter ended all square.
Frankfurt had the ball in the net 17 minutes in, only for the offside flag to cancel out Ante Rebic's effort, but it was the visitors who had the lead a minute later.
Marc Bartra, deployed at right-back due to Dortmund's defensive injury crisis, thumped in a low cross-shot, with Sahin reacting sharply to prod home from 10 yards out.
Neven Subotic was caught out by Wolf as Frankfurt responded well, but Burki was out swiftly to block the forward's chip, while Haller sliced wide.
Frankfurt were exposing Dortmund's ramshackle defence, but the hosts then suffered a blow – Timothy Chandler making way after picking up a serious-looking knee injury.
Pierre-Emerick Aubameyang had the chance to double Dortmund's lead with half-time approaching, the Gabon striker driving wide after controlling Pulisic's knockdown.
The Dortmund talisman was at it again after the restart, skewing over from close range before drawing a fine save out of Hradecky, but Frankfurt's goalkeeper was beaten soon after.
Philipp drove forward at pace, squaring up his marker before planting a firm finish into the bottom-left corner.
Aubameyang did find the target on the hour after Philipp turned provider, but his celebrations were cut short by the assistant referee's flag.
Frankfurt finally made Dortmund pay for their sloppiness after 64 minutes – the referee pointing straight to the spot after Burki had barged clumsily into Rebic and Haller stepped up to slam home from the spot.
Dortmund were shaken up and after Hradecky had pulled off a top-class save from Pulisic's strike, Frankfurt took full advantage as Wolf stole in to drive a low effort past Burki.
Bosz's side had Burki to thank with 10 minutes remaining as he atoned for his earlier error with a fine stop from Haller before, in stoppage-time, Hasebe got across to clear Sahin’s volley off the line as Dortmund’s lead at the top was cut to one point.
Key Opta stats:
- For the first time since February 2017 Borussia Dortmund have not gone three consecutive matches without a win in all competitions.
- BVB have scored 25 goals in the Bundesliga in 2017-2018, which equals their club record after 9 games (1994-1995).
- The last time a Bundesliga game involving Borussia Dortmund ended with a draw after they took a two-goal lead was in November 2014 in Paderborn (2-2).
- This was Mario Gotze's 100th appearance for Borussia Dortmund in the Bundesliga.