Everton looked the more dangerous side in the opening minutes, but it was Manchester United that scored first when Edinson Cavani connected with a lovely Marcus Rashford cross at the back post to head home for the lead on 24 minutes.
The goal was Cavani's second in as many games for Manchester United, who had won each of the five previous matches in which the Uruguay international got on the scoresheet.
Paul Pogba, whose future at Old Trafford is uncertain, pulled up with an injury shortly before half-time and was replaced by Fred.
Everton failed to close down Bruno Fernandes on the edge of the penalty area in first-half stoppage time and he made them pay, firing a spectacular shot over the head of Robin Olsen to stake Man United to a 2-0 lead at the break.
Despite being dominated in the first half, Everton started the second on a promising note when Abdoulaye Doucoure poked home from close range after David de Gea spilled a save right into his path in front of goal.
Minutes later, Everton drew level through James Rodriguez, who settled a Doucoure cutback with his first touch before smashing a low half-volley past De Gea.
The ebb and flow of the match continued -- with United regaining momentum after Everton tied it up -- and the hosts were soon back in front when Scott McTominay headed past Olsen from a set piece.
With the game nearly over, Everton won a free kick in the attacking third and Michael Keane flicked on Lucas Digne's delivery to allow Calvert-Lewin to score with the last kick of the game.
The result puts United on 45 points, two behind leaders Man City, who are ahead on goal difference and have two games in hand.
Carlo Ancelotti's Everton move ahead of Chelsea into sixth place on 37 points from 21 matches.