Yakou Meite was sent off as 10-man Reading were beaten on the final day of the Championship as Swansea City made it into the play-off places on goal difference.
Routledge and Cullen scored in the second half after Puscas’ penalty had cancelled out a stunning opener from Brewster just moments after Meite was sent off.
The defeat means that Mark Bowen’s side finish the 2019/20 season in 15th place on 56 points.
Reading made two changes going into their final Championship game of the season with Liam Moore replacing the injured Tom McIntyre, while Matt Miazga was also selected to start in what is likely to be his last game for the Royals after two consecutive loan spells.
Swansea came into the game with an outside hope of finishing in the play-off places, and remarkably made their slim hopes of making the top six on goal difference.
The stats were certainly in Swansea’s favour heading into the match, with the Swans unbeaten in their last 12 meetings against the Royals.
Both sides started fairly evenly with the Royals having slightly more possession than their play-off pushing opponents in the early exchanges.
Rafael picked up the Player of the Season award before the match but there was nothing he could do to prevent Swansea’s opener after an emphatic strike from Rhian Brewster gave the visitors the lead after 17 minutes.
The forward on loan from Liverpool took aim from 35 yards and found the back of the net to continue his prolific scoring form to get his 10th Championship goal of the season.
John Swift tried to find an equaliser with a free kick wide on the left which he struck sweetly but it flew just over the bar and onto the roof of the net.
Michael Olise then worked his magic as he floated in a teasing ball into the box for Swift but he could only manage a tame header at goal that was comfortably saved by Erwin Mulder.
The chances continued to come in quick succession as the Royals turned the heat up on Swansea as George Puscas played a clever backheel to find the overlapping run of Yakou Meite whose shot was kept out at the near post.
The ball then somehow stayed out just moments later following a corner after Meite’s deflected effort looped up onto the bar before Michael Morrison put the rebound wide from a few yards out.
Having turned on the pressure, Reading were dealt a blow in the 40th minute when top scorer Meite was shown a red card. After a scuffle with Swansea’s Mike van der Hoorn, Meite pushed his opponent in the face and subsequently was dismissed.
However, the Royals continued their strong finish to the half and were awarded a penalty just minutes after going down to 10 men as Andy Rinomhota was brought down in the box.
Puscas stepped up from 12 yards and put the ball past Mulder despite the Dutch keeper getting a strong hand to the ball.
The end to end action continued as Swansea missed a big chance to take the lead just before the break. Ben Cabango’s blocked shot fell kindly into the path of Jay Fulton who dragged his effort wide from just eight yards out.
The second half started in a slower manner after a frantic opening 45 minutes.
Swansea had the first clear cut chance of the half when they were awarded a free kick inches outside on the box after Moore brought down Brewster from behind. Grimes tried to find the corner on Rafael’s side but put his effort wide to waste a big opportunity.
The Royals found a chance on the hour mark when Miazga collected the ball on the touchline following a corner and tried to stand it up for Moore, but he could only head over the bar having to stretch to reach the ball.
Swansea pressed home their one man advantage and took the lead again in the 65th minute when Routledge lifted the ball over Rafael with a composed finish.
Ayew should have given Swansea a two goal cushion but he somehow poked the ball wide from just four yards out after a cut back.
Garath McCleary came on in place of Swift to mark his final appearance in an eight year spell at the club.
Rafael spotted the run of Olise in the Swansea half and found him with a superb kick as the Royals looked to catch the Swans on the counter. Olise tried to find Puscas at the back post but the Romanian couldn’t quite reach the cross.
Just moments later Swansea added a third through Liam Cullen who smashed the ball past Rafael on the half volley.
Needing just one more goal to make it into the play-off places on goal difference, Swansea pushed forward and were caught on the break but a magnificent last ditch sliding tackle prevented Lucas Boye’s goal bound effort in the 88th minute.
And their persistence paid off as Routledge found his second of the game with a header from close range in stoppage time to give them an unlikely route into the play-offs after a remarkable six goal swing.
Reading: Rafael, Gunter, Morrison, Miazga, Moore, Richards, Rinomhota, Swift, Olise, Meite, Puscas.
Subs: Walker, Obita, McCleary, Boye, Araruna, Adam, Osho, Masika
Swansea City: Mulder, Roberts, Cabango, Van der Hoorn, Guehi, Bidwell, Fulton, Grimes, Gallagher, Ayew, Brewster.
Subs: Gould, Rushesha, Dhanda, Celina, Kalulu, Garrick, Dyer, Routledge, Cullen.
Goals: Brewster 17′, Puscas 43′ (pen), Routledge 66′, Cullen 85′, Routledge 90′