Ronaldo’s 50th club hat-trick tempered a revolt among the fanbase at Old Trafford as United move above Arsenal into fifth on goal difference, three points behind Tottenham.
There was unrest among the United fans before the game even began as many did not come into the stadium until the 17th minute to protest against the 17 years of the Glazer family’s ownership of the club.
Those late to take their seats missed Ronaldo’s first goal of the afternoon as he swept home Anthony Elanga’s cross.
The 37-year-old then powered home Alex Telles’ corner for his 20th goal of the season despite United’s struggles.
However, the Red Devils’ defensive problems were laid bare by the bottom-of-the-table Canaries who had scored just 20 goals in their previous 31 league games.
Kieran Dowell halved the arrears in first-half stoppage time before Teemu Pukki levelled seven minutes into the second half.
David de Gea then had to produce a brilliant save to deny Pukki completing the comeback.
United players were then met with chants of “you’re not fit to wear the shirt”, with Paul Pogba singled out for abuse when he was substituted.
But Ronaldo had the final say when his free-kick flew through the grasp of Tim Krul 14 minutes from time.
Brighton halted Tottenham’s charge towards the Champions League as Leandro Trossard struck a 90th-minute winner.
But Antonio Conte’s men were bailed out by another defeat for Arsenal as they failed to close the gap against a Southampton side that had been thrashed 6-0 by Chelsea last weekend.
Brighton were Arsenal’s conquerors last time out to snap a seven-game winless run.
With confidence restored, the Seagulls looked more like their old selves under Graham Potter as they controlled the game and completed a north London double thanks to Trossard’s composed finish in the final minute.
“Today we did everything too slow,” said Conte.
“It was not a good game for us.
“When you can’t win, you should not lose and that is a lesson for us today. When it is not your day, you have to pay more attention and not lose.”
Arsenal’s lack of a top striker proved their downfall at St. Mary’s as Fraser Forster produced a string of fine saves to leave Mikel Arteta’s men frustrated.
Southampton took their chance when it came as defender Jan Bednarek swept high past Aaron Ramsdale just before half-time.
At the bottom of the table, Watford look set to return to the Championship after Brentford inflicted their 10th successive home league defeat.
Pontus Jansson scored the winner deep into stoppage time for the Bees after Emmanuel Dennis had cancelled out Christian Norgaard’s opener.
Second-from-bottom Watford remain six points adrift of safety with six games left to play.
English Premier League results on Saturday:
Tottenham 0 Brighton 1 (Trossard 90)
Manchester United 3 (Ronaldo 7, 32, 76) Norwich 2 (Dowell 45+1, Pukki 52)
Southampton 1 (Bednarek 44) Arsenal 0
Watford 1 (Dennis 55) Brentford 2 (Norgaard 15, Jansson 90+5)
Playing on Sunday
West Ham v Burnley – 16:15
Newcastle v Leicester – 16:15
By Garrin Lambley © Agence France-Presse