Last week's first ever meeting between the clubs saw Stoycho Stoev's Bulgarians claim a famous 1-0 victory thanks to Roman Bezjak's goal.
A thrilling second leg swung to and fro, Lazio first to take the upper hand as Keita Balde, inside 18 seconds, and Brayan Perea put them ahead.
The hosts hit back through Bezjak and Hristo Zlatinski but Miroslav Klose looked to have seen Lazio through until Juninho Quixada's late intervention.
Ludogorets conceded only two goals in the group stage and goalkeeper Vladislav Stoyanov was excellent at the Stadio Olimpico - but he was beaten immediately back in Razgrad.
The home side actually kicked off but gave the ball away almost immediately and Balde broke down the left before squeezing home the second-quickest goal in the Europa League's brief history.
The 18-year-old sent another effort wide and it took almost a quarter of an hour for the shell-shocked hosts to threaten, Marcelinho's shot held comfortably by Lazio keeper Federico Marchetti.
Marcelinho then lashed wide from Junior Caicara's cross before Zlatinski sent a free-kick over the bar for Ludogorets.
Balde's eventful first half continued when he was booked for dissent having been caught offside, the third caution in the opening half-hour following team-mate Abdoulay Konko and Ludogorets' Bezjak.
Cosmin Moti followed just before half-time for fouling Balde, Candreva sending the free-kick wide.
Lazio again struck early in the second half, though not as dramatically as in the first.
This time, they had to wait eight minutes before a breakaway ended with Perea latching on to Ogenyi Onazi's pass and finishing clinically.
Balde shot over for Lazio and Bezjak went close for Ludogorets, Marchetti turning his shot on to the post.
The striker was not to be denied, though, and two minutes later he cut the deficit by curling the ball into the far top corner after he was played in by Fabio Espinho.
That left Ludogorets behind in the tie on away goals alone and Zlatinski put them ahead in the tie after 78 minutes when his dipping long-range effort deceived Marchetti.
The tie was far from over - as Klose proved four minutes later, following in to score after Lucas Biglia's header was saved.
But there was still time for one last twist as Juninho Quixada ran on to Bezjak's long pass and flicked the ball past the keeper to see the Bulgarians through.