Stefano Pioli – back in the dugout after missing three games with COVID-19 – saw his side get off to a torrid start, with Tomas Rogic and Odsonne Edouard putting Neil Lennon's struggling Scottish Premiership outfit into an early two-goal lead.
Milan powered back, though, and restored parity with quickfire goals from Hakan Calhanoglu and Samu Castillejo before the break.
Jens Petter Hauge scored a wonderful goal at the start of the second half and set up substitute Brahim Diaz with eight minutes remaining, with Milan advancing to the knockouts courtesy of Lille's dramatic late comeback for a 2-1 win over Sparta Prague in the group's other game.
Milan started in slapstick fashion and found themselves deservedly two goals down after just 14 minutes.
Rogic took full advantage of Rade Krunic's dismal control from Gianluigi Donnarumma's pass to whip into the bottom-left corner from 18 yards, before Edouard made the most of more woeful defending to clip over the Milan goalkeeper.
The hosts belatedly woke from their slumber and drew level thanks to two goals in the space of two minutes.
Calhanoglu scored his 18th direct free-kick in all competitions since the start of the 2013-14 season – second only to Lionel Messi (36) in Europe's top five leagues in that time – to reduce the deficit, before Castillejo wiped out Celtic's lead with a deflected close-range finish after Ante Rebic superbly teed him up with a backheel.
Hauge put Milan ahead five minutes after the interval, the Norway international skipping past a number of Celtic players before rolling a fine finish beyond Vasilios Barkas from 15 yards.
Donnarumma did well to paw away Ryan Christie's free-kick and Diaz wrapped up the win late on, lifting over Barkas after more impressive work from Hauge as Milan sealed a fifth consecutive triumph against Celtic, who have been victorious in just two of their past 11 games in all competitions.