The Royals took the lead against the run of play through McAnuff's composed 39th-minute strike as they looked to capitalise on Nottingham Forest's heavy defeat by Derby.
Birmingham, without a league win at home since early October, levelled four minutes later as Paul Caddis smashed home a penalty after midfielder Callum Reilly was fouled. However, McAnuff popped up at the far post with an 82nd-minute winner to make it 14 games without a league win at home for City.
Birmingham's Lee Novak and Reading forward Adam Le Fondre had early half-chances while Royston Drenthe twice dragged speculative shots wide of City goalkeeper Darren Randolph's goal.
The first save of the match came in the 28th minute when Royals goalkeeper Alex McCarthy had to parry Federico Macheda's shot from the edge of the box out for a corner.
Drenthe was Reading's danger man and his positive drive forward gave Chris Gunter the chance to have a shot on goal, with his attempt from the right not far off target.
After a positive spell for Birmingham, Reading took a 39th-minute lead. Drenthe charged down the right before crossing and when the home side failed to clear, McAnuff enjoyed plenty of time and space to set himself up before smashing right-footed into the bottom left corner.
The lead was short-lived, however, as Birmingham levelled within four minutes. Kaspars Gorkss tripped Reilly in the box and after referee Dean Whitestone pointed to the spot, right-back Caddis stepped up to drive the ball into the bottom right corner as McCarthy nearly got a hand to it.
Macheda forced a good save from McCarthy in the 54th minute as he got his head to Caddis' floated cross.
Royals boss Nigel Adkins sent on Pavel Pogrebnyak and Garath McCleary as he pushed for a winner but it was Birmingham who looked more lively going forward.
They somehow failed to score in the 64th minute when substitute Jordan Ibe's
low cross from the left was deflected just inches past the post. From Andrew Shinnie's resulting corner, Will Packwood headed back across goal and Macheda rose to head the ball against the bar in a lucky escape for the visitors.
Jordan Obita and Pogrebnyak both missed decent chances while City's Ibe smashed one off target in between.
The winner came eight minutes from time and again it was McAnuff who came up with the goods. Gunter made inroads on the right and when he fired in a low cross, the skipper was on hand to convert in front of the travelling support.
Substitute Nikola Zigic went close to equalising as McCarthy did well to get down to save his header in the 90th minute, before having a goal disallowed when the ball had gone out for a goal kick.