Robin van Persie put the Gunners ahead early with his 18th goal of the season but Swansea outplayed and outpassed what has long been one of England's most attractive teams.
Scott Sinclair struck a 16th-minute penalty before Nathan Dyer made it 2-1 just 12 minutes into the second half. Theo Walcott tied it in the 69th but Arsenal conceded less than a minute later as Danny Graham took advantage of slack defending to score the winner just a minute later.
Arsenal's sixth loss in 11 road games allowed sixth-place Newcastle to move into a tie with 36 points following a 1-0 win over Queens Park Rangers. Arsenal is four points behind fourth-place Chelsea in the final Champions League berth.
Swansea's commitment to attacking, passing football instead of the safety-first approach of many Premier League newcomers has now lifted it to 10th place, 10 points behind the Gunners but nine clear of the relegation zone.
"It's something we all inherently believe in and we've had success with it," Swansea manager Brendan Rodgers said. "The players show great courage to pass the ball.
"Sometimes we make mistakes but I've got a great belief they can play and pass, even against the best teams."
In its first topflight season since 1982-83, Swansea played about 100 more passes than Arsenal.
Arsenal looked on course for a comfortable win when Van Persie put the visitors ahead in the fifth minute. Andrey Arshavin slipped a pass forward from the inside right channel for Van Persie to collect, cleverly delaying his shot to tuck the ball between defender Steven Caulker's legs and over goalkeeper Michel Vorm from close range.
But Aaron Ramsey brought down Dyer in the area and referee Michael Oliver awarded a penalty, which Sinclair sent past diving goalkeeper Wojciech Szczesny's left hand to tie it.
Walcott and Arshavin both shot over the bar at the start of the second half before Joe Allen stole the ball from Ramsey and picked out Dyer to score.
Walcott clipped the ball over Vorm for 2-2 but Swansea substitute Gylfi Sigurdsson passed to Graham, giving the striker the chance to shoot past the hesitant Szczesny.
"We've got the players to play great football and we've shown today we can match one of the best teams in the Premier League — and at their style of football," Dyer said.
Thierry Henry came on as a substitute for Arsenal but could do little.
Arsenal stayed fifth in the standings, four points behind Chelsea.
"It was a great game for the spectators," Graham said. "Two passing teams that like to play football.
"We did catch them napping. We're stood here with three points and we deserve them."
Newcastle moved above Liverpool despite losing leading scorer Demba Ba to Senegal and the African Cup of Nations. Leon Best again started up front and scored the only goal in the 37th minute.
The Ireland international collected a pass from Ryan Taylor, cut inside right back Luke Young and sidefooted into the far corner for his first goal since Sept. 17.
But Newcastle lost midfielder Yohan Cabaye to an ankle injury after a tough challenge from Shaun Derry.
Defeat in Mark Hughes' first match in charge left QPR without a win from its last nine league matches and in the relegation zone.
Manchester City can restore its three-point advantage over defending champion Manchester United on Monday if it beats Wigan. United beat Bolton 3-0 on Saturday, when third-place Tottenham was held to a 1-1 tie by Wolverhampton Wanderers.