On the night he set the record for the most appearances in the competition, the 36-year-old Portugal international delivered the goods to save his manager Ole Gunnar Solskjaer from what would have been another disappointing result.
- Dawson: Ronaldo rescues Man United, Solskjaer in UCL
- ESPN+ guide: LaLiga, Bundesliga, MLS, FA Cup, more
- Don't have ESPN? Get instant access
But for long stretches of the game, an upset looked very much on the cards, and had the visitors been sharper in front of goal, the contest might have been over by the break.
Villarreal had beaten Solskjaer's team on penalties in last season's Europa League final, and Unai Emery's side's excellent organisation and ability on the break again posed problems for a disjointed United.
With Aaron Wan-Bissaka, Harry Maguire and Luke Shaw all missing from the defence, United were easily opened up on several occasions in the first half with Diogo Dalot enduring a particularly difficult 45 minutes.
Alcacer had a header from a Danjuma cross tipped over by the United keeper and, after a slip-up by Raphael Varane, found himself one-on-one with De Gea but fired wide.
After squandering those chances in the first half, however, Villarreal took a deserved lead when a counter-attack was finished off by Alcacer, who turned in Danjuma's low cross.
United struck back seven minutes later with a cleverly worked free kick as Bruno Fernandes chipped the ball deep to Telles on the left and the Brazilian fired home a perfect volley.
Old Trafford erupted in relief and joy and Ronaldo picked up a yellow card for ripping off his shirt and throwing it into the crowd.
Atalanta top the group standings with four points, one ahead of Young Boys and United. Villarreal are bottom with one point.