Nuno Espirito Santo's side were undoubtedly second best before the break, with Kevin De Bruyne scoring from the spot before Phil Foden made it two.
Wolves, though, having been so flat during the first 45, suddenly came into life and responded through Raul Jimenez's well-placed header.
An equaliser even looked to be on the cards before City made sure of the three points at the death through Gabriel Jesus on a strange night.
If you are looking for positives, the last half an hour was spirited stuff from Wolves as they created several chances and put one away.
Daniel Podence was particularly impressive and superbly set up the header for Jimenez, nutmegging star of the show De Bruyne in the process.
But that first-half showing from was well off the pace and the deciding factor.
Romain Saiss truly got sucked in by De Bruyne, winning the penalty and tucking it away emphatically.
The defence, as a whole, were at sixes and sevens as Foden doubled the advantage and City could have easily been four up at the interval.
You simply cannot afford periods like that against a team as good as Pep Guardiola's outfit.
There were encouraging signs in the second period, but Nuno will also be unhappy with the lack of a cutting edge in the final third.
Jimenez's goal was a top one, but Wolves had four other real openings.
The goal from Jesus at the death may be considered a bit harsh by some, but the visitors, all things considered, deserved this victory. It was not all bad, but there is certainly stuff to brush up on for the trip to West Ham on Sunday.
Wolves only made one change from their season-opening 2-0 win at Sheffield United as Ruben Neves took Leander Dendoncker's place in the middle of the park.
Adama Traore continued at right-wing-back while new arrival Ki-Jana Hoever was not signed in time for this clash, with Nuno also set to bolster that position with the imminent £29million signing of Nelson Semedo from Barcelona.
City - this being their first game of 2020/21 - were not quite as strong as usual, although it did not show in the first half.
Sergio Aguero and Aymeric Laporte both missed out through injury, while Ilkay Gundogan was not involved because of testing positive for Covid-19.
Wolves are intent on starting games sharply now - like they did at Bramall Lane, scoring both goals inside six minutes - as Nuno looks to take them to the next level, but any plans to come flying out of the traps early here came to a grinding halt as Fernando Marcal hobbled off.
His Molineux bow was over in a flash, pulling up off the ball, signalling to Nuno and swiftly being replaced by Ruben Vinagre.
City, smelling blood, dominated possession as Nuno's lot looked to find their feet after that enforced change. But they didn't. Wolves were unsure and the visitors very assured, and the inevitable result was Pep's men taking the lead.
De Bruyne had already looked dangerous - making several forward runs and testing Rui Patricio with a decent free-kick - before drawing a foul from Saiss and winning a spot-kick.
It was a needless and rash challenge from the Moroccan, an utterly stonewall penalty, and the Belgian predictably found the bottom corner with aplomb. Nothing Patricio could do.
City had their tails up, no doubt about it. Wolves, frankly, were being completely outclassed. Raheem Sterling was constantly on the move, and he would prove instrumental in their second - the brilliant De Bruyne involved again, too.
Played onside by Conor Coady, Sterling latched onto the midfield maestro's well-weighted through-ball and cut it back to Foden for the simplest of finishes.
A neat move but definite question marks over the defending - slow to react and seemingly ball watching.
Wolves, in truth, were lucky to go into the break only two down. De Bruyne had a one-on-one effort saved by Patricio while a speculative volley from Rodri almost found the top corner.
It was about as one-sided a half as you are likely to see. City were classy, yes, but they had so much time to spray the ball about as they saw fit while Wolves were careless in possession.
Jimenez saw a header from a Traore cross fly high and wide, but, really, Nuno's pack did not lay a glove on them. He would have been furious at the break.
Surprisingly, the same gold and black XI emerged for the second period while City continued to control proceedings for the first few moments, with De Bruyne remaining in the thick of things.
Traore was guilty of giving the ball away cheaply a couple of times and Jesus almost punished him, seeing his strike kept out by a strong stop from Patricio.
Then, in the 55th minute, Wolves woke up. They switched on, upped the tempo significantly and created some big opportunities in quick succession.
Nuno and his coaching team were convinced they had pulled one back as Traore found Podence, whose clever drive on the turn sailed just past the far post.
And they kept turning the screw. Pedro Neto's low cross fell to Neves on the edge of the box, but his tame attempt was blocked and cleared by Kyle Walker.
Podence was set free by Joao Moutinho but went for the lob and got too much on it before, finally, Jimenez sidefooted wide after another Traore cross.
Four chances going begging, but Wolves were still playing with a lot more conviction than in the first 45, and they did get their goal.
Podence beautifully put the ball through the legs of De Bruyne and came up with a peach of a cross, allowing Jimenez to head home.
A comeback which had seemed so unlikely was on the cards, with Dendoncker and Fabio Silva introduced as Nuno's lot desperately chased an equaliser.
But, instead, City grabbed a third in added-on time as Jesus found the net via a hefty deflection off Coady.
Wolves (3-5-2): Patricio; Boly, Coady (c), Saiss; Traore, Neves, Moutinho (Dendoncker, 77), Neto (Silva, 77), Marcal (Vinagre, 7); Jimenez, Podence
Subs not used: Ruddy (gk), Kilman, Buur, Vitinha
Goal: Jimenez (79)
City (4-3-3): Ederson; Walker, Stones, Ake, Mendy; Fernandinho (c), Rodri, De Bruyne; Foden, Jesus, Sterling (Torres, 82)
Subs not used: Steffen (gk), Otamendi, Doyle, Bernabe, Mahrez, Delap
Goals: De Bruyne (pen, 20), Foden (33), Jesus (90+5)
Referee: Andre Marriner (Birmingham)