Jurgen Klopp's side came into the match up 2-0 on aggregate from the first leg but quickly went behind after Villarreal's Boulaye Dia pounced on Etienne Capoue's cross-shot to give the hosts a second-leg lead.
Liverpool were left frustrated throughout the remainder of the first half -- failing to get a single shot on target -- and saw Villarreal double their lead just before the break when Francis Coquelin scored from an exquisite glancing header to level the tie on aggregate.
Substitute Diaz then made his presence felt soon after, heading Trent Alexander-Arnold's cross down and through Rulli's legs again to level the match and give Liverpool a 4-2 aggregate lead they would not relinquish.
"We never tend to make these Champions League semis easy for ourselves," Alexander-Arnold said. "It was difficult for us [in the] first half, sometimes you can't really control the game the way you want to. They started the game very well, scored early goals which is obviously what they wanted to do, but like I said, we got the game done."
Rulli made another blunder to gift Liverpool their third of the night, as he was caught way out of his penalty area and allowed Sadio Mane to beat him to the ball and fire into an open net to secure the win.
Liverpool, who won the 2018-19 Champions League title, will now await the result of the other semifinal second leg on Wednesday at the Santiago Bernabeu -- with Manchester City leading Real Madrid 4-3 on aggregate -- to find out their opponent for the final on May 28 in Paris.
"It's always nice to get the job done on a Tuesday, we can watch the game tomorrow knowing we're going to be there and we're going to play. I'm sure it'll be a good game," Alexander-Arnold said.
Klopp's side has been prolific in 2021-22, scoring 139 goals in 57 games in all competitions, their highest-ever total in a single season in club history.
The victory also keeps alive Liverpool's hopes of a Quadruple, having already won the Carabao Cup and still in contention for the Premier League, UCL and FA Cup titles.