Second-from-bottom Ingolstadt's - who had only scored seven times on the road prior to their trip to Frankfurt - win dented the hosts' hopes of UEFA Champions League qualification.
Romain Bregerie volleyed the visitors into a 26th-minute lead and fifth-placed Frankfurt's task was made harder eight minutes later when David Abraham was dismissed for a foul on Dario Lezcano.
The hosts were given a chance to level the scores when Martin Hansen fouled Ante Rebic but Makoto Hasebe struck the bar with his 56th-minute penalty.
And Pascal Gross made them pay from the spot 13 minutes later, after Michael Hector had been penalised for fouling Leckie.
Leckie himself saw red for an 81st-minute challenge on Bastian Oczipka but Ingolstadt held on for a welcome three points.