Swansea City were denied a fourth away win in a row as a last-gasp equaliser by Tom McIntyre denied them victory in a thrilling encounter at the Select Car Leasing Stadium.
Russell Martin’s side had trailed to an early Lucas Joao penalty, but responded in superb style as Hannes Wolf and Joel Piroe fired home spectacular strikes.
A penalty from Piroe – Swansea’s first in 366 days – took the Dutchman to 22 goals for the season, and Obafemi fired home his 10th to make it 4-1.
But the relegation-threatened hosts set up a grandstand finish thanks to Tom Ince and Joao’s second strike of the afternoon, before defender McIntyre arrived to fire in a leveller in time added on.
The Swans extended their unbeaten run to seven games, but that was little consolation after they relinquished their grip on a contest they had been in complete and utter control of for long periods.
Head coach Martin had made just one change from the Good Friday draw with Barnsley as Flynn Downes returned to the line-up with Jay Fulton dropping to the bench.
Reading knew a win could potentially secure their Championship status and they got the ideal start when Joao scored from a highly-debatable third-minute penalty.
Piroe tracked Josh Laurent into the area and the pair made contact as they contested the ball, the Royals man rode the challenge but then took a stride before going to ground.
Referee Kevin Friend waved away the appeals, but the spot-kick was given by his assistant, who was no nearer to the incident.
Joao sent his spot-kick down the middle to beat Andy Fisher, but the Swans responded magnificently through Wolf.
Downes made the initial incision in midfield, driving into space before feeding the ball left where the Austrian took a touch to steady himself before curling a beautiful strike into the top corner of the net.
It was an emphatic reply, and the visitors nearly took the lead when Piroe just lifted a fine ball by Cyrus Christie over Royals keeper Orjan Nyland, but also over the bar.
But Piroe made no mistake in the 12th minute when clever play from Christie and Jamie Paterson had worked him room on the edge of the area.
He took a touch before dispatching a superb left-footed strike across Nyland and into the far corner.
The speed of Swansea’s comeback had stunned the hosts, and their frustrations began to show with Tom Ince booked for a poor challenge on Joel Latibeaudiere that could have merited more than a booking.
The Swans were in control with the game being played almost entirely in the Reading half for periods, and Downes and Piroe nearly combined to put the midfielder in on goal on the half-hour.
But Reading came back with renewed vigour, and Junior Hoilett smacked the bar from distance with an excellent effort that had Fisher beaten in the Swans goal.
Wolf volleyed into the side-netting at the other end from a deep Ben Cabango cross, before Paterson dragged wastefully wide after Kyle Naughton and Downes had broken the Reading press.
The Swans were then given the chance to extend their lead when Hoilett went through the back of Michael Obafemi in the area in first-half stoppage time.
It was Swansea’s first penalty of the season and Piroe stepped up and steered the ball into the bottom corner to send the visitors in two goals to the good at the interval.
Reading knew they need a quick start to the second half, and it took some good defensive work from Matt Grimes to clear as Joao found some space on the far side of the area.
But the Swans soon reasserted their control, dominating the ball and carefully moving around their hosts, and one lovely counter involving Downes and Piroe saw the ball just run away from Wolf on the edge of the box.
Ince fired high and wide at the other end, but the Swans added to their tally with a well-worked finish in the 58th minute.
Paterson sent a cross rolling into Obafemi on the edge of the area, with the striker exchanging passes with Piroe before rifling the ball high into the net.
But Reading responded quickly through Ince, who ran in behind the Swans defence to cushion a raking diagonal pass into the net on the volley.
Joao was then denied a close-range finish by an excellent Cabango block, which took the sting out of the effort and allowed the ball to trickle through to Fisher.
But the hosts narrowed the gap to one when Joao turned in from close range after a couple of poor clearances – and one superb goal-line block from substitute Fulton – had led to the ball falling for the Portuguese striker on the edge of the six-yard box.
From being in complete control, the Swans now found themselves playing amidst a very different atmosphere entering the final 20 minutes.
Obafemi had a chance to re-establish a two-goal cushion as he swept wide from Wolf’s astute pull-back, before Wolf then fired over from the striker’s pass as the duo combined again a few minutes later.
Olivier Ntcham then had his strike pushed onto the post as the frantic nature of the contest continued into stoppage time.
And the missed opportunities proved costly when McIntyre arrived to volley in a knockdown from a hopeful punt into the Swansea box.
Reading: Orjan Nyland, Michael Morrison (captain), Tom McIntyre, Tom Ince, Danny Drinkwater, Andy Yiadom, Lucas Joao, Tom Dele-Bashiru, Baba Rahman, Junior Hoilett (Yakou Meite 85), Josh Laurent.
Unused Substitutes: Luke Southwood, Alen Halilovic, Terrell Thomas, Femi Azeez, Brandon Baker, Kelvin Ehibhatiomhan.
Swansea City: Andy Fisher; Ben Cabango, Kyle Naughton, Joel Latibeaudiere; Cyrus Christie, Flynn Downes (Jay Fulton 65), Matt Grimes (captain), Hannes Wolf; Joel Piroe (Ryan Manning 83), Jamie Paterson (Olivier Ntcham 69), Michael Obafemi.
Unused Substitutes: Ben Hamer, Korey Smith, Kyle Joseph, Cameron Congreve.
Referee: Kevin Friend