The Czech champions twice pegged back City before they secured victory late on through the ubiquitous Alvaro Negredo and Edin Dzeko.
The win now means that City can still beat Bayern Munich to top spot in Champions League Grouop D, but they would need to win 3-0 in Germany next month in their final encounter.
City had gone ahead just after the half-hour when Sergio Aguero fired home from the penalty spot, but the visitors levelled before the break through Tomas Horava.
Samir Nasri restored their lead on 65-minutes, but again Plzen were level within minutes this time with Stanislav Tecl firing home.
With 12-minutes remaining substitute Negredo finished from just a yard out to continue his wonderful run of form, before Dzeko headed home in the final minute.
City had started brightly before some all-too-familiar sloppiness at the back, in the continued absence of captain Vincent Kompany, allowed Plzen to grow in confidence.
Manuel Pellegrini had made seven changes – including restoring goalkeeper Joe Hart – but it needed the late introduction of Negredo to finally tilt the game their way.
But on the issue of Hart’s return, after five games on the bench, the goalkeeper could at least be pleased with his efforts.
Javi Garcia stabbed City’s first chance wide after five minutes when he was picked out by Samir Nasri at a set-piece.
Nasri, in fine form of late, then hit the bar for a second successive game with a thunderous effort from 25 yards.
The Frenchman was presented with an easier opportunity when Aguero deftly floated a cross to the far post but he side-footed a volley wide.
Aguero then skipped past two challenges to fire wide before Hart passed his first examination by confidently claiming a corner.
Hart’s quick thinking also almost led to the opening goal as he immediately released the ball and Aguero raced through to fire home, only to be pulled up for a foul.
That decision seemed harsh but the hosts were perhaps fortunate to be awarded a penalty just after the half hour when Aguero’s cross struck Frantisek Rajtoral’s hand and the Argentine dispatched the spot-kick for his 15th goal in his last 12 appearances.
It was hoped the goal might ease a few jitters that had become apparent in the City defence in the minutes preceding it.
Most notably, Rajtoral had shot wide at the end of a slick move from the Czechs moments earlier.
But it appeared to have the opposite effect as, for the remainder of the first half, Plzen started to take the game to the hosts and an equaliser came just before the interval as Horava unleashed a fierce shot from distance that gave Hart no chance.
The equaliser was probably deserved but although City looked to respond in the second half, perspective was offered as Aguero was withdrawn and Jesus Navas sent on.
Hart then did wonders for his confidence with a fine save from a long-range Daniel Kolar strike but it did not repel the Czechs for long as more uncertainty at the back was exploited and Kolar set up Tecl to score from close range.
It might have got worse for City when Martin Demichelis brought down Kolar on the edge of the area but Pavel Horvarth shot over.
City sent on their other in-form striker, Negredo, for Nasri with five minutes remaining and he soon made an impact.
In truth he could not miss, as he found himself in the right position when Navas’ cross was diverted his way by Dzeko, who may have been disappointed not to score himself.
Still Plzen were not done and Hart came to their defence again to deny Rajtoral with his feet.
Dzeko got his goal in the dying moments when he nodded in a cross from a James Milner cross.