The visitors started the match brightly and took the lead in the 10th minute when Jakub Blaszczykowski picked out Mkhitaryan, who finished from close range to score his first goal for his new club.
Dortmund enjoyed more possession than their opponents and looked to be cruising to a deserved half-time lead before Kadlec ended his frustration by drilling home a loose ball just before the break.
The away side regained the lead in the 56th minute when Mkhitaryan was allowed too much space outside the box, with the Armenian responding by curling in his second of the afternoon.
Frankfurt were inches away from equalising just moments later but Anderson Bamba headed against the post, rather than into the back of the net.
The hosts continued to push for a goal that would have secured them a point, but Dortmund held firm to record the win.