Monaco progress as Group E winners, a point ahead of Bayer, who are also in the last 16.
A first-half strike from Vladlen Yurchenko, a well-worked goal by Germany winger Julian Brandt and a late own goal by Monaco goalkeeper Morgan de Sanctis sealed the win at the BayArena.
Regardless of the result, Monaco progress as Group E winners, a point ahead of Bayer, who are in the last 16 at the expense of Tottenham Hotspur.
Leverkusen took a deserved lead on the half hour mark thanks to Yurchenko's superb curling long-range shot from just outside the area.
It was the 22-year-old Ukrainian's first appearance of the season having suffered a hairline leg fracture in September.
Leverkusen doubled their lead three minutes after the break.
Brandt finished off a flowing move as he floated his shot over De Sanctis after being played into area by Hakan Calhanoglu.
Australian winger Robbie Kruse came off the bench to win a penalty for Leverkusen when he was fouled in the area.
Brazilian left-back Wendell hit the crossbar with the spot kick, but the ball bounced in to the net off De Sanctis on 82 minutes.
It was a bit of luck for Leverkusen, who had failed to convert all four penalties awarded in the Bundesliga this season.
Leverkusen finish the group stages unbeaten with two wins and four draws.
This was the first time French league side Monaco have lost to Leverkusen after three wins and two draws in previous meetings.
The Germans avenged their 1-1 at Monaco in September when they were denied victory when Kamil Glik equalised for the hosts in the 94th-minute.