The champions came from three goals behind to trail 3-2 early in the second period, but a mistake from German goalkeeper Marc-Andre ter Stegen allowed Pablo Hernandez to score a vital fourth goal in the 77th minute as Celta netted four at home to Barcelona for the second successive season.
The visitors did score a third late on through Gerard Pique - the centre-back's second of the match - but it was too little too late as Celta held on to rise into 10th position in the table.
As expected, it was Barcelona that enjoyed most of the possession inside the opening 10 minutes, but Celta were fairly comfortable at the back as they managed to restrict the visitors to a couple of long-range attempts.
The game's first attempt on target came in the 11th minute when Arda Turan, who replaced Paco Alcacer in the Barcelona XI, set up Luis Suarez, but the striker could only sting the palms of Sergio Alvarez.
The home side were a threat though and Hernandez, who had found all sorts of space inside the box, headed wide of the post from a corner as an open match continued to entertain with 20 minutes on the clock.
Indeed, it was Celta that made the breakthrough in the 22nd minute of action when summer arrival Pione Sisto collected a pass from Iago Aspas before sliding the ball into the opposite corner for his second league goal of the season.
Aspas almost doubled Celta's lead moments later when he sent a powerful strike towards the top corner, but Ter Stegen made the save during a period where Barcelona were struggling to find their rhythm.
Then came an incredible two-minute spell as Celta scored their second when Aspas found the bottom corner with a well-placed strike after a quick counter-attack, before Barcelona defender Jeremy Mathieu turned a dangerous Daniel Wass cross into his own net in the 33rd minute as the home side stormed into a 3-0 lead.
Luis Enrique's response was to send Andres Iniesta and Ivan Rakitic to warm up, but Celta were absolutely rampant as they pressed players forward in a remarkable bid to score four first-half goals against Barcelona, who were struggling without the presence of Lionel Messi.
Iniesta was introduced at the start of the second period for his 600th Barcelona appearance, but Celta remained the dominant force on home soil as the likes of Sisto and Theo Bongonda continued to cause problems with their pace and ability to carry the ball in wide positions.
Barcelona had a glimmer of hope in the 58th minute, however, when Pique headed an Iniesta cross into the back of the net to make it 3-1 with a large chunk of the second period still to play in Vigo.
From three goals ahead and very comfortable, Celta were suddenly under severe pressure on home soil as Barcelona, with Iniesta pulling the strings, continued to force the issue with little over 15 minutes of normal time to play.
Celta had the comfort of a fourth in the 77th minute, however, when Hernandez closed down Ter Stegen and the Barcelona goalkeeper could only smash his clearance straight at the midfielder, who claimed a bizarre goal.
Pique netted his second in the 87th minute after heading a Denis Suarez cross into the back of the net, but Neymar and indeed Pique missed golden chances to level the scores in the five minutes of stoppage time as Celta held on to secure all three points.
Barcelona, who remain fourth in the table, will attempt to return to winning ways when they welcome Deportivo La Coruna to Camp Nou after the international break on October 15, while Celta are next in action against unbeaten Villarreal one day later.