Everton saw its Champions League dream ended by the new Premier League leader, which jumps Liverpool on goal difference with two games left to play
The league leader looked in for a difficult afternoon and fell behind early to a stunning curling effort from England World Cup hopeful Ross Barkley.
Sergio Aguero equalized before limping off with an injury, and Edin Dzeko scored either side of halftime to put City in control.
Romelu Lukaku responded with a header from a Leighton Baines cross to set up a nervy finish and despite the best efforts of Gerard Deulofeu, who forced a save from Joe Hart with a fine individual run, Roberto Martinez's side could not find an equalizer and saw their Champions League hopes ended.
City made an enterprising start, with Aguero often the architect, but Everton took a 10th-minute lead in sensational fashion.
Barkley, who impressed throughout, brought Goodison Park to its feet by whipping Steven Naismith's layoff into the top corner from 25 yards.
Yaya Toure brushed Leon Osman aside to blast over after 16 minutes, while Barkley jinked past Javi Garcia and Martin Demichelis at the other end to prompt a magnificent last-ditch tackle from Vincent Kompany.
Perhaps inspired by the captain's heroics, City drew level in the 21st minute.
Center back Antolin Alcaraz was drawn towards Toure, who slipped a pass though for Aguero to blast beyond Tim Howard at his near post.
However, in the act of scoring, Aguero appeared to sustain another leg problem in an injury-plagued season and the striker was replaced by Fernandinho.
As halftime approached Howard thwarted Dzeko from an acute angle but when the ball was worked out to James Milner the big Bosnian was on hand to head home from a pinpoint cross.
Everton had a glorious chance to draw level within a minute of the restart as Barkley stormed forward and Naismith shrugged off Pablo Zabaleta, but Joe Hart made a stunning low save to deny the Scotland international.
In a similar response to the one following Kompany's earlier brilliance, City streamed up field to give itself breathing space.
Fernandinho sublimely controlled the attack and found Samir Nasri, whose low centre was turned in by Dzeko for City's 150th goal in all competitions this term.
Faced with the seemingly routine prospect of closing out a decisive win, City then faded badly and Lukaku reduced the arrears when he stooped to convert Leighton Baines' arching cross.
Bizarrely, City's defenders were then of greater use at the other end of the field, as Zabaleta and Demichelis went close to adding a fourth.
Lively Everton substitute Gerard Deulofeu rippled the side netting after cutting through the visiting side with a brilliant jinking run.
A lengthy period of treatment for a shoulder injury to Dzeko brought about six minutes of stoppage time, but Manuel Pellegrini's side held on and is likely to guarantee a second league crown in three seasons by winning the club's remaining matches, at home to Aston Villa and West Ham.