The Citizens were well on course for the three points required to win a third Premier League title at the midway point, only for Paul Pogba's quickfire double and a Chris Smalling strike to turn the game around.
City, wasteful with numerous chances when two goals to the good, can now no longer secure top spot in a record time as a result of the shock defeat, which drags the Red Devils within 13 points of them with six games to play.
United attempted to press City high up the pitch and remain compact in the final third, but the hosts were still able to create a number of chances in the first half.
City felt that the full-back used his hand to do so, and replays certainly suggested that was the case, but it would matter little as the Citizens soon made their dominance count.
David de Gea pulled off a smart stop down low to keep out Bernardo Silva, just moments before Vincent Kompany got ahead of Smalling to power a header past the Spaniard from the edge of the six-yard box.
Five minutes later the second arrived through Ilkay Gundogan, who turned in the box to work a yard of space and then simply poked the ball into the bottom corner.
City, beaten in three of their last eight heading into this match, had no intention of sitting back and they really should have been out of sight before the interval.
Raheem Sterling missed from a one on one when on his weaker foot, sending the ball over the crossbar, before doing likewise four minutes later from a slightly more awkward position.
The England international, used through the middle in the absence of a recognised striker, would complete his hat-trick of misses before the half-time whistle went as he picked out De Gea with his left-footed shot.
A good opening also came and went for Gundogan, largely thanks to the positioning of De Gea to keep out the glanced header from a deep delivery.
Despite his goalkeeper having the most first-half touches of any player in his starting lineup, Jose Mourinho held off from making a change, and it looked like being a familiar story early in the second period as Gundogan clipped the post with his latest effort.
In the blink of an eye it was game on once again, though, with Pogba rounding off a fine team move that saw Ander Herrera chest the ball into his path following some good play from Alexis Sanchez on the right.
Pogba's second was equally impressive, this time coming from a deep midfield run to get on the end of a Sanchez pass before directing his header past a stunned Ederson.
The comeback was complete with a little over 20 minutes to go courtesy of Smalling's volley, getting on the end of Sanchez's free kick to make amends for his poor defensive play for City's opener.
City felt that they should have had a penalty late on when Young's foot went over the ball and caught Aguero on the shin, but Martin Atkinson felt otherwise, leading to complaints from Fernandinho who was shown a yellow to rule him out of his side's next two league games.
With their problems mounting, City threw all they had at their opponents, who had previously won just one of their last 10 away league meetings with fellow established top-six sides.
De Gea produced yet another miraculous save to claw out Aguero's header, which would have taken him to 200 goals in a City shirt, and Sterling then found the post with his deflected shot.
That would prove to be it, bringing an end to the Citizens' 27 game unbeaten run on home soil and making it back-to-back losses in all competitions.
MANCHESTER CITY (4-3-3): Ederson; Danilo, Kompany, Otamendi, Delph; Fernandinho, Gundogan (Aguero 76'), Bernardo (Jesus 72'); D.Silva (De Bruyne 72'), Sterling, Sane
MANCHESTER UNITED (4-3-3): De Gea; Young, Bailly, Smalling, Valencia; Matic, Pogba, Herrera (Lindelof 94'); Lingard (McTominay 85'), Lukaku, Sanchez (Rashford 82')