Josip Stanisic, the man on loan from Bayern, opened the scoring in the 18th minute before Alex Grimaldo doubled the advantage five minutes into the second half, but Frimpong added an exclamation mark after Manuel Neuer came up for a corner and Leverkusen broke to punish him.
Bayern had more of the ball but throughout the night it always felt as though Xabi Alonso's side were the more dangerous, and this was a huge statement in their bid to win a first Bundesliga title and banish the nickname Vizekuzen - a mark of the five times they have finished runners-up.
The match at the BayArena kicked off eight minutes late after fans threw toy balls and other items onto the pitch as part of ongoing protests against the prospect of outside investment into the Bundesliga, and once play began it was Bayern who appeared to be on the front foot.
But while Leverkusen were happy to invite the visitors on to them, they were simply waiting for the moment to counter.
Their first shot at goal came in the 11th minute but Amine Adli's effort lacked the power to trouble Neuer. Adli threatened again seven minutes later before Kim Min-jae got a foot in just in time, but Bayern were asleep from the resulting throw-in and were made to pay.
Robert Andrich drilled in a low ball across the face of goal and the Bayern defence stood still as Stanisic arrived to fire home, left all alone by Sacho Boey, usually a right-back but deployed on the left here in his second appearance since joining from Galatasaray last month.
Adli had a superb chance to get a second just before half-time as Granit Xhaka's pin-point pass put him clean through on goal, but Dayot Upamecano recovered to get a toe on the ball, poking it back to Neuer.
It took only five minutes of the second half for the second to arrive. Grimaldo played a neat one-two with Nathan Tella to carve open the Bayern defence before beating Neuer at his near post with a rising shot.
Bayern were rocking, and there was chaos in their penalty area soon after, with Eric Dier's cross hitting the arm of Leon Goretzka before bobbling back to Neuer, with a VAR check for handball coming to nothing.
Grimaldo hit the crossbar direct from a corner just after the hour as the ball dramatically dipped, but it bounced to safety.
Bayern tried to up the ante as Thomas Tuchel turned to his bench but struggled to create any real opportunities for a frustrated Harry Kane.
Instead, Leverkusen looked more likely to score again. Frimpong had already hit a post at the end of one late counter-attack, but had the final say after Neuer failed to get on the end of the corner and he raced down the pitch to fire into the unguarded net.