The Lisbon club's relentless march to a first title in four years continues at pace, and they have now won 23 of their last 25 games in all competitions, remaining unbeaten domestically since the opening day of their league campaign.
That run looked at threat early on at the Estadio de Madeira however, as Candeias converted a seventh-minute penalty.
Jorge Jesus' side came into the game off the back of a dominant 3-1 win at Tottenham in the UEFA Europa League last 16, and displayed their attacking prowess to turn the game on its head before the interval.
Rodrigo set up Lima's equaliser, before putting Benfica ahead shortly after, with a fine Ezequiel Garay header giving the visitors a cushion.
Djaniny set visiting nerves jangling with an 80th-minute effort, but Garay's second secured the win once and for all as Benfica wrapped up a sixth league win in a row.
Nacional took the lead early, though there was a strong scent of controversy as referee Manuel Mota penalised Benfica captain Luisao for a handball, despite the ball appearing to hit the defender's knee.
Candeias was not put off by the protestations, dispatching the ball firmly beyond Jan Oblak's despairing dive.
Jesus saw his men behind for just 17 minutes though, Rodrigo neatly touching a cross from the right into Lima's path, with the Brazilian smashing home his ninth league goal of the campaign.
Rodrigo himself got in on the act nine minutes later, turning sharply and hitting his third goal from as many games, before Garay scored an excellent looping header from Ruben Amorim's corner.
Benfica looked to be cruising to victory but Djaniny's effort kept them honest, with a cross from Candeias almost sweeping in for an incredible equaliser.
But Garay had the final say, nodding home another set-piece as Benfica held on for a win that keeps them firmly top of the Primeira Liga pile.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.