There are 14 points separating the two sides in the Serie A table, with Milan in second and Roma occupying fifth, but the home team entered the second leg with a 1-0 advantage following an impressive performance at San Siro last week.
Daniele de Rossi's side finished the job in front of their own supporters, running out 2-1 winners despite being reduced to 10 men in the first half of the contest when Zeki Celik was sent off.
Roma have never won the Europa League, finishing as runners-up on two occasions, including last season, when they were beaten by Sevilla in the final.
De Rossi's side will take on Bayer Leverkusen in the semi-finals of the competition, with the Bundesliga outfit navigating their way past West Ham United.
Roma will take on Bayer Leverkusen in the semi-finals
The first chance of the match brought the first goal, with Gianluca Mancini, who scored in the first leg, registering once again, with the centre-back finding the back of the net in the 12th minute from close range after a strike from Lorenzo Pellegrini had come off the woodwork.
Ruben Loftus-Cheek hit the crossbar in the 20th minute, with Milan coming close to levelling, but Roma doubled their advantage on the night and took a 3-0 lead on aggregate in the 22nd minute through Paulo Dybala, with the Argentine finding the far corner with an excellent strike after smart work from Romelu Lukaku.
Milan were given a lifeline in the 31st minute, though, when Celik received a straight red card for a poor challenge on Rafael Leao, who was breaking clear down the left.
The visitors put the pressure on in the latter stages of the half, with the one-man advantage certainly opening up more space, but Roma continued to defend well, and it was an awfully long way back for Milan.
Milan had a half-chance early in the second period through Christian Pulisic, but the United States international's effort was always rising over the Roma crossbar.
Roma prove to be too strong for their Serie A rivals over the two legs
The hosts remained a big threat on the break, and Milan goalkeeper Mike Maignan needed to make a smart save just before the hour to keep out a low drive from Leonardo Spinazzola.
Tammy Abraham was next to try his luck for Roma, with the striker having a close-range effort blocked, as Milan continued to leave space at the back due to their desire to commit players forward.
The visitors gave themselves a glimmer in the 85th minute when defender Matteo Gabbia headed a cross from Leao into the bottom corner, but it was always going to be a case of too little, too late.
Theo Hernandez was given a straight red card in second-half stoppage time for a challenge on Stephan El Shaarawy, but it was overturned following a VAR check, with Milan keeping all 11 players on the field but bowing out of the competition courtesy of a 3-1 aggregate loss.
Milan will now switch their attention to Monday's blockbuster contest against Inter Milan in Serie A, and a loss for Stefano Pioli's side would see their rivals win the title with five games to spare.
Roma, meanwhile, will also be in action on Monday at home to Bologna, with De Rossi's team looking to stretch their unbeaten run in Italy's top flight to eight games.