United looked set to seal a morale-boosting and hard-fought victory thanks to Bruno Fernandes's brace, but Villa fought back in the final 13 minutes to secure an unlikely point.
There was undoubtedly a hint of fortune about United's opener, an Emiliano Martinez howler allowing Fernandes to score for only the second time in the Premier League since September, but the Portugal star's second was an emphatic effort.
That looked as though it would be enough for United, but Jacob Ramsey scored and then teed up new loan signing Coutinho to rescue a draw with a dream debut goal.
It took United, without Cristiano Ronaldo and Marcus Rashford because of injuries, just six minutes to score, although Martinez gave them more than a helping hand, inexplicably allowing Fernandes's long-range strike squirm through his legs.
Villa came to life towards the end of the half, but David de Gea was equal to Emi Buendia's near-post header and debutant Lucas Digne's controlled strike.
Chances continued to flow at either end after the restart, with Anthony Elanga going close twice and Ramsey forcing De Gea into a smart save.
But Fernandes was less wasteful, his drive clattering in off the crossbar after a Morgan Sanson error led to Fred feeding United's captain.
Villa rallied, however. Ramsey pulled one back with a well-taken left-footed finish inside the box before playing an inch-perfect pass across goal for Coutinho to smash home five minutes later.