The Brazilian opened the scoring in the 18th minute and then provided substitute Alexis with a pass which the Chilean subsequently lobbed over Diego Lopez to finish off the visitors with 12 minutes remaining.
Twenty-year-old Jese got a goal back for Madrid in stoppage time, but there was not enough time left for an equaliser.
The hosts dominated the play in the first half, up against an experimental Madrid side which included defender Sergio Ramos playing as a third holding midfielder and Cristiano Ronaldo starting as a centre-forward, with Karim Benzema and Isco left on the bench.
Gareth Bale made his second start for Real Madrid but was unable to influence the game and had a frustrating evening, only managing two long-range shots which missed the target, and then picking up a yellow card for a producing a high foot during a challenge with Gerard Pique.
Before the game the home fans held aloft a huge mosaic with a supporting message for former coach Tito Vilanova, who was forced to resign in the summer to continue with cancer treatment.
Barca started stronger with Andres Iniesta controlling their play but they did not create many clear chances until Neymar broke the deadlock on 18 minutes.
Sergio Busquets played in Iniesta, who marauded towards goal and then gave the ball to Neymar on the left-hand side of the penalty area.
The Brazilian beat two defenders then shot, the ball deflecting off Dani Carvajal and beyond the reach of Diego Lopez.
Barca could have get a second goal a couple of minutes later, Lionel Messi racing down the right before shooting a few feet wide of the far post with his left foot.
Madrid were without shape and without ideas. Their only attempts on goal were long-range efforts from Ronaldo and Bale which were never going on target, although Los Blancos thought they could have had a penalty just before the break.
Ronaldo put in a cross towards Sami Khedira from the left-hand side and Victor Valdes came out to gather but could not keep control of the ball, which may have struck the hand of Barcelona defender Adriano before the goalkeeper collected it again.
Neymar had a chance to double the lead 10 minutes after the break, half-volleying a long ball from Iniesta, but Lopez made the save.
Ramos was withdrawn early in the second half after proving ineffective in his unfamiliar role in midfield and was replaced by Asier Illarramendi, who Madrid signed from Real Sociedad in the summer for 32million euros (£27 million).
Madrid's play improved considerably after the Basque player came on, and a couple of minutes later, created their best chance of the game.
Khedira recovered the ball, Luka Modric played in Ronaldo and the Portuguese's early shot was turned round the post by Valdes.
From the corner, Angel Di Maria tried his luck from outside the area but Valdes was equal to it.
Benzema replaced Bale with half an hour left and from then on Madrid had more shape.
The Frenchman headed over minutes after coming on and then struck the bar with an effort from outside the area.
Ronaldo was denied a penalty after going down following a challenge from Javier Mascherano, and the Madrid bench fiercely contested the decision.
Madrid were looking much likelier to score but a moment of genius from Alexis killed off the game. The Chilean, who had replaced Fabregas, ran onto a through ball from Neymar. Varane caught up with him but the forward turned around and then released a sublime chip which soared over the outstretched arm of Lopez and dropped into the net.
Dani Alves could have added a third with seven minutes remaining as he approached goal alone, but Lopez stuck out a foot to deny him.
Khedira found himself one-on-one with Valdes late on, but shot straight into the goalkeeper's arms.
Jese, who had replaced Di Maria, salvaged some pride for Madrid by scoring from a Madrid counter, receiving a low cross from Ronaldo and then striking beyond Valdes, who could have done better.
Dani Alves had one final chance to score in the dying seconds, but his shot was blocked.