Defender Abdou Diallo put the hosts ahead with his first Bundesliga goal when he netted on the rebound after his header was initially saved in the 36th minute.
After the goal Dortmund's attack started to stutter as the midfield lost possession and Frankfurt grew bolder.
Sebastien Haller snatched a deserved equaliser in the 68th minute, pouncing on a failed clearance by Marcel Schmelzer to volley in.
But former Frankfurt player Marius Wolf struck back four minutes later after superb work from teenager Jadon Sancho who shook off two players and floated a pin-point cross to his team-mate at the far post.
Substitute Alcacer, making his Bundesliga debut after joining from Barcelona this season, also got onto the scoresheet with an 88th-minute goal to seal Frankfurt's second consecutive loss.
Dortmund are on seven points from three matches, with champions Bayern Munich - who face Bayer Leverkusen this weekend - on six from two matches.