In the battle of the Bundesliga's two representatives in the Europa League, a Christian Gunter own goal looked like it would be enough to give Frankfurt all three points.
But Hofler came off the bench and earned Freiburg a point, just like he had done against Bayern Munich earlier this season.
Frankfurt then ended the game with 10 men as Johannes Flum was sent off in the final minute.
The draw still left struggling Freiburg without a win in the league, eight matches into the season, and saw them remain second bottom.
Oliver Baumann repelled Frankfurt's early advances, denying Vaclav Kadlec twice, the first time after little more than a minute.
Sebastian Rode hit a shot wide, while Baumann got a telling deflection to turn Constant Djakpa's cross wide of the far post.
Freiburg rallied and started to create chances of their own, albeit none quite as dangerous as Frankfurt's first three efforts.
The hosts made a brighter start to the second half with Kevin Trapp called upon for the first time in the game to keep out Sebastian Freis' effort, but just as it looked like the game was destined to become the first goalless draw of the season in the Bundesliga, a calamitous goal put the visitors in front.
Djakpa's cross was kicked up against Gunter by his own goalkeeper, and the ball trickled back over the line.
Freiburg made a change, throwing on Mike Hanke, and Jonathan Schmid went down easily the challenge of Carlos Zambrano, earning a yellow card rather than the penalty he wanted.
Hofler also came on and, after seeing one shot saved by Trapp, he beat him with an 85th-minute header to bring Freiburg level.
Srdjan Lakic missed two good chances to restore Frankfurt's advantage before they lost Flum to a second yellow card as tempers flared.