Javi Martinez and Franck Ribery scored either side of the break for Bayern before Kevin Volland pulled one back for the hosts to set up a frantic finale.
The visitors, without top scorer Robert Lewandowski and central defender Mats Hummels, made sure of the points when James Rodriguez curled a free kick into the top corner in the first minute of stoppage time to lift them to 44 points.
“Tactically and defensively my team did it well for long stretches,” coach Jupp Heynckes told reporters.
“We lost our concentration a bit after leading 2-0 but it is just difficult to win here. Leverkusen are young and talented and they attacked today.”
New Bayern signing Sandro Wagner, who made a late substitute appearance, set a club record with his league comeback for the Bavarians over 10 years after his previous Bundesliga game for them. The 30-year-old Germany striker joined from Hoffenheim.
Second-placed Schalke 04 are in action at RB Leipzig on Saturday while Leverkusen stay fourth on 28. Borussia Dortmund, in third also on 28 points, host VfL Wolfsburg on Sunday.
Leverkusen initially showed the fine form they have displayed over the past few months with a strong start that saw them press Bayern high and launch lightning quick counter attacks with speedy wingers Leon Bailey and Karim Bellarabi.
Dominik Kohr’s 18th minute header narrowly missed the target but was their best chance before Bayern gradually took control.
The visitors took the lead in the 32nd minute when Martinez fired in from close range after Leverkusen failed to clear an Arturo Vidal header.
Ribery, battling for a contract extension, added the second goal on the hour, shaking off two players to score with a low shot past Bernd Leno before Volland’s 70th minute deflected strike saw Leverkusen get back into the match.
However, Rodriguez’s free kick dashed home hopes as Bayern won at Leverkusen for the first time since their 2013 treble-winning season. REUTERS