The Swans came from behind twice to end a seven-match spell without a win to put a dent in Wigan's survival bid.
Roger Espinoza had volleyed Wigan ahead in the last action of the first half in an uninspiring 45 minutes, but the game came to life after the break.
Angel Rangel's stunning volley cannoned off the post and past keeper Joel Robles, before James McCarthy put Wigan ahead two minutes later.
But Itay Shechter pulled the Swans level once again just before the hour mark with his first goal for the club since his loan move from Kaiserslautern.
Then Dwight Tiendalli broke Wigan's hearts with his first for the Swans after 76 minutes - the Dutchman coolly controlling possession in the home box before beating Robles.
The Swans were then dealt a huge blow as keeper Michel Vorm was stretchered off after a collision with Ben Davies, with Gerhard Tremmel taking his place between the sticks.
Both sides had great chances to add yet more drama to an action-packed second half, but neither took them.
It meant the Swans - who were mathematically safe after Sunderland's draw with Stoke on Monday night - picked up their first win since the win over Newcastle in March, and as a result it moved them onto 46 points with just two games to go.
The Swans made three changes to the starting XI.
Chico Flores was ruled out with a calf problem so Garry Monk returned to lead the side in the heart of defence alongside Ashley Williams.
Dwight Tiendalli got his first start since the draw at Norwich last month as he took the place Nathan Dyer which meant Angel Rangel started on the right wing.
In the final change, Itay Shechter led the line as Michu missed out with a hamstring injury, while the Swans were again without Ki Sung-Yueng as the midfielder was struggling with a dead leg.
Roberto Martinez opted to make three changes from his starting XI that won at West Brom at the weekend.
In went Roger Espinoza, James McArthur and Gary Caldwell for Ronnie Stam, ex-Swans loanee Jordi Gomez and Jean Beausejour.
Wigan: Joel Robles, Arouna Kone, James McCarthy, Gary Caldwell, Ben Watson (Jordi Gomez, 85), Shaun Maloney, Callum McManaman (Franco Di Santo, 64), James McArthur, Emmerson Boyce (Ronnie Stam, 85), Roger Espinoza, Paul Scharner.
Subs: Ali Al Habsi, David Jones, Angelo Henriquez, Roman Golobart.
Swans: Michel Vorm (Gerhard Tremmel, 85), Angel Rangel, Garry Monk (capt), Ashley Williams, Ben Davies, Leon Britton, Jonathan de Guzman, Wayne Routledge, Dwight Tiendalli, Pablo Hernandez (Kemy Agustien, 77), Itay Shechter (Nathan Dyer, 69).
Subs: Kyle Bartley, Neil Taylor, Luke Moore, Rory Donnelly.
The Swans got off to a promising start, with Wayne Routledge latching onto Roger Espinoza's mis-placed pass. But the winger's powerfully driven effort was tipped wide for a corner by keeper Joel Robles.
Wigan responded through Arouna Kone as the striker cut inside and unleashed a thunderous low effort, but Michel Vorm did well to gather it.
The Swans then had an opportunity to take the lead as Robles picked up Gary Caldwell's pass-back, but Ashley Williams skied his effort into the home support behind the goal from ten yards out.
At the other end, Kone again tested Vorm with a powerful low drive but the Dutch keeper parried it before Williams cleared the danger.
Vorm then easily collected Shaun Maloney's 20-yard free-kick before the home crowd got the goal they were craving for.
Half-time: Wigan 1 Swans 0
The Swans made an excellent start after the restart, with the visitors applying instant pressure.
And they were level after 50 minutes, Routledge's excellent cross finding Angel Rangel, who volleyed across the face of goal before his shot rebounded in off the far post.
All that good work was wasted just three minutes later, however, as Wigan got themselves back in front.
James McCarthy raced onto a through ball and, despite the last-gasp efforts of Williams, he drilled low past Vorm.
Things almost got worse for the Swans just minutes later as Kone's cross found McCarthy, but he failed to make enough contact to trouble Vorm.
The home crowd had barely sat back on their seats by the time the Swans silenced the DW Stadium.
After 59 minutes, Hernandez picked up a loose pass and he found Itay Shechter, who controlled before curling his effort into the bottom corner via a deflection off Boyce.
It was end-to-end action, and Caldwell thought he had given his side the lead once again with a thunderous header from Shaun Maloney's corner, but Vorm reacted superbly and palmed it out for a corner.
Caldwell went close again from the resulting delivery, as sub Franco Di Santo nodded down to the defender but he could only direct his shot wide from six yards.
Michael Laudrup then made a change as Nathan Dyer replaced scorer Shechter after 69 minutes, with Dyer leading the line.
And six minutes later, Dyer played a big part in the Swans taking the lead for the first time.
Dyer, Ben Davies and Hernandez all linked up in the Wigan box before the latter's cross was not dealt with by the home defence and Dwight Tiendalli took full advantage as he controlled possession before thundering in off the surface and past Robles.
Jonathan de Guzman went close to adding another but his 25-yard free-kick dropped just wide before the Swans were dealt a massive blow for the last ten minutes.
When Wigan curled in a cross into the box, out came Vorm to punch clear but he collided with Ben Davies in the process.
It led to Vorm being stretchered off and Gerhard Tremmel taking his place, while Davies recovered enough to play the remainder of the game.
The remaining minutes were tense, and Kone went close to levelling the scores but he thundered just wide of Tremmel's far post.
Wigan were reduced to ten men as sub Ronnie Stam went off for treatment shortly after being introduced, with the hosts already having used their three changes.
Nine minutes of added on time followed, and Dyer went close to finishing off Wigan as he got onto the end of a Routledge cross during a counter attack.
Then Kone again probed, drilling towards the bottom corner before Tremmel got down to save.
But that was the end of a thrilling game, with the Swans battling hard for all three points.