Having established a 3-1 lead in Lisbon, Liverpool extended their advantage with Ibrahima Konate’s powerful 21st-minute header from a Kostas Tsimikas corner.
Benfica equalised through Goncalo Ramos’ excellent turn and finish, before Roberto Firmino’s two second-half goals – a tap-in followed by a volley – in front of the Kop looked to have put the Reds in control.
But after Roman Yaremchuk broke through to beat Alisson and make it 3-2 on the night, Darwin Nunez scored a late equaliser.
Nunez was then denied by Alisson as Benfica finished strongly but Liverpool held out to advance 6-4 on aggregate.
They now host Villarreal – the club they beat in the semi-finals of the Europa League in 2016 – on 27 April before travelling to Spain for the second leg on 4 May.
Villarreal secured their last-four spot by overcoming Bayern Munich in the quarter-finals.
Liverpool boss Jurgen Klopp said: “I’m really happy because being in a semi-final is so special.
“We expect a couple of really difficult games. It will be a tough cookie but we are a tough cookie, so who cares?
“Villarreal deserved to get through. I know Bayern Munich don’t want to hear that.”
The semi-final brings Liverpool face-to-face with Villarreal boss Unai Emery, who has won the Europa League four times.
Three of those triumphs came at Sevilla, including victory over Klopp’s Liverpool in the 2016 final, and the other with his current club.
Klopp added: “The manager is the king of the cup competitions, so they are experienced and a team full of desire and well organised with top-class players.”
The games are coming thick and fast for Liverpool at the business end of the campaign, with a huge FA Cup semi-final against Manchester City up next on Saturday – the second meeting between the Premier League’s top two in a week.
They head for Wembley knowing they are one round away from a third Champions League final in five seasons under Klopp.
The Liverpool boss made seven changes to the side that started the first leg in Portugal last week, with Mohamed Salah and Sadio Mane among those on the bench.
There was a return for James Milner who, at the age of 36, became the oldest Englishman to start a Champions League match since 37-year-old David Beckham did so for Paris St-Germain in 2012-13.
The Reds were made to work hard for their place in the semi-finals as Benfica came out fighting but the damage was done in the first leg.
“I made seven changes and that makes life not easy for the players,” added Klopp. “We lost concentration when we were 3-1 up and it looked like we were through.
“It was not exactly what we wanted but it is absolutely not important.
“If we played the best game of the season tonight, it wouldn’t have made it more likely to get to the final. We are through and that’s all that matters and I’m really happy.”
After Saturday, Liverpool – who trail leaders Manchester City by a single point – have a chance to return to the top of the Premier League, for 24 hours at least, when they host Manchester United in the Premier League the following Tuesday.
It will require a monumental effort for Liverpool, who won the Carabao Cup in February, to finish the season with four trophies and they will certainly have to defend better than they did in this game.
But with just a few weeks of the season left, they remain in the hunt for what would be an incredible feat.