United was bailed out by a late Cristiano Ronaldo winner after an unimpressive performance against Villarreal in the UEFA Champions League midweek, though there was no such drama this time as the Red Devils lacked cohesion in the final third.
Ole Gunnar Solskjaer sprung something of a surprise by benching Ronaldo in favour of Edinson Cavani, and although that change may not have had the desired effect, United did go into the break leading thanks to Anthony Martial's first league goal since February.
Ronaldo was introduced from the bench for his 200th Premier League appearance but Everton refused to go away and deservedly levelled thanks to Townsend's fifth goal of the season, that equaliser preventing United from briefly going top of the table.
The hosts survived a late scare as Yerry Mina saw a goal ruled out for offside after a nervy video assistant referee (VAR) check for the home faithful.
Everton was arguably the better team for most the first half and went close to the opening goal in the 16th minute with a Michael Keane header that went just wide.
Demarai Gray then forced David de Gea into a great save with a fine long-range effort shortly after a Cavani header that tested Jordan Pickford.
It took a little longer for United to click into gear, but when they did the deadlock was broken. Mason Greenwood picked out Bruno Fernandes, who turned before feeding Martial into the left side of the area and the Frenchman converted via a slight deflection.
Solskjaer introduced Ronaldo and Jadon Sancho as United went in search of a second, but Everton caught it on the break to level.
Gray twice held off flimsy tackles from Fred before feeding Abdoulaye Doucoure, and he set up Townsend for a straightforward finish just past the hour.
Everton thought it had a winner as Mina tapped in from Tom Davies's pass, but United's blushes were spared as replays showed the Colombian had strayed offside.