Cavaleiro took Diogo Jota's pass to hand Wolves a 16th minute lead.
By then Reading had already hit the post and the Royals created several chances in the second half with Wolves under severe pressure before Doherty scored on the counter attack two minutes from time.
Wolves have produced some spellbinding performances of free-flowing football so far this season.
This definitely wasn't one of them, writes Tim Spiers at the Madejski Stadium.
The phrase "muck and nettles" probably isn't in Nuno Espirito Santo's vocabulary – it's something his predecessor Mick McCarthy, the last Wolves manager to achieve promotion from this division, would have said.
Much more of this and the Portuguese head coach may want to start adopting it...but ultimately all that mattered here was that Wolves won three points to return to the top of the table.
Early and late goals from Ivan Cavaleiro and Matt Doherty sealed the win. In between – and indeed before – Reading created enough chances to score three or four goals.
The hosts, who in a rare occurrence this season bossed Wolves in terms of possession, were denied by a couple of excellent John Ruddy saves but were also guilty of profligacy and endured some bad fortune.
Wolves relied on some rugged blocks from Ruben Neves, Conor Coady and the excellent Willy Boly...but when all was said and done they clearly possessed the extra quality in the final third to see off a decent Reading outfit.
Not all their wins will be dominant one-sided displays, as had been the case against Fulham before the international break.
But this showed another side to Nuno's Wolves. One that could come in very handy during the long winter ahead.
Nuno made one change from the team that beat Fulham 2-0 more than two weeks ago, with Ruben Vinagre replacing the suspended Barry Douglas at left wing back.
Reading boss Jaap Stam named both Dave Edwards and Jon Dadi Bodvarsson on the bench for the Royals, who have struggled this season but won two on the trot before the international break.
Indeed the hosts started full of confidence – and shaky Wolves could have conceded twice inside the opening 10 minutes.
First John Ruddy unconvincingly fumbled a long-range John Swift shot onto the post with just 45 seconds on the clock. Then Conor Coady played a back pass to the keeper and Mo Barrow charged down his clearance, with the ball narrowly bouncing wide.
It was a sloppy start from Nuno's team but they gradually got into a rhythm – and were ahead on 16 minutes.
Ivan Cavaleiro cut inside from the left and play to Diogo Jota whose return pass to his fellow Portuguese forward was sumptuous and cut through a motionless Reading back line, allowing Cavaleiro the luxury of rolling the ball on his studs as he gorgeously went round Vito Mannone and tapped home.
It was the kind of goal that epitomised Wolves' confidence – and quality – this season and sent an army of 4,000 travelling fans potty.
Thereafter it was a fairly uneventful half with Reading enjoying more possession than the visitors but failing to pose a threat other than via the electrifying pace of Barrow who troubled Ryan Bennett on occasion.
Other than Willy Boly throwing his body in the way to block a shot from a corner Wolves were comfortable. At the other end Cavaleiro was denied a second when his effort was deflected into the side netting, while Jota also saw a decent effort charged down.
Cavaleiro and Jota were clearly in the mood, with the two players combining delightfully on occasion and wing backs Vinagre and Doherty providing a good outlet whenever Wolves piled forward.
Reading began the second half as they had the first period, on the front foot, and Boly and Ruben Neves both made crucial blocks.
Wolves had sporadic moments on the counter, particular via Jota, but the hosts looked threatening at the other end and you got the feeling Wolves would need a second goal.
But for all Reading's possession they were failing to create clear cut chances. Liam Moore almost had a free header from a corner but the ball grazed his forehead and the introduction of Sone Aluko changed little.
In fact Wolves carried the greater threat on the break. Vinagre fired across the face of goal and the Bonatini, in his last action of the game, drilled not far wide from 20 yards before he was replaced by Bright Enobakhare.
Then back came Reading. Moore nodded a clever free kick into the six yard box where Conor Coady crucially dived in to head clear. Then Romain Saiss and Neves got in a right muddle to lose possession, allowing Aluko a free 20-yard shot which Ruddy saved.
Reading continued to dominate the ball and, with Wolves far from convincing, Nuno sent on Alfred N'Diaye for goalscorer Cavaleiro but the home side ramped things up and only a stunning Ruddy save denied Barrow from point blank range, with Aluko drilling the rebound inches wide.
Vinagre almost cost his team with some lunacy in his own box, trying to take a player on, but Wolves escaped when Ruddy blocked the resulting shot.
It was a minor miracle that Wolves were still ahead...but with two minutes to go they broke and sealed the win. Helder Costa, just on as a sub, produced some dazzling footwork down the right and the ball eventually came to Matt Doherty who buried a left-footed finish past the keeper.
1 – John Swift tries his luck from range inside 50 seconds and John Ruddy unconvincingly fumbles the ball onto the post.
8 – Conor Coady plays a back pass to Ruddy – Mo Barrow charges down the keeper's clearance and the ball bounces just wide.
16 – GOAL – Diogo Jota finds IVAN CAVALEIRO with a sumptuous through ball which bamboozles the Reading defence and he takes the ball coolly round Vito Mannone to score.
80 – Magnificent save from Ruddy to get a hand to Barrow's free shot from six yards. Sone Aluko then drills the rebound inches wide.
88 – GOAL – Great work from Helder Costa as Wolves break. Then MATT DOHERTY saunters into the box and finishes left footed to seal the points.
Reading (3-4-3): Mannone; McShane, Moore, Ilori (Edwards, 30); Bacuna, Swift, Van den Berg, Gunter; Beerens (Bodvarsson, 81), Kermorgant (Aluko, 66), Barrow. Subs: Clement, Blackett, Jaakkola, Richards.
Wolves (3-4-3): John Ruddy; Bennett, Coady (c), Boly; Doherty, Saiss, Neves, Vinagre; Cavaleiro (N'Diaye, 79), Bonatini (Enobakhare, 72), Jota (Costa, 85). Subs: Norris, Batth, Miranda, Price.
Goals: Cavaleiro (16), Doherty (88)
Attendance: 20,708 (3,873 Wolves fans)
Referee: Roger East (Wiltshire)
1st (38 points from 17 matches)