Luis Enrique’s side appeared to be cruising at 2-0 up in the 31st minute, as Lionel Messi and Neymar scored fine goals, but the hosts battled back to stretch their unbeaten run at home to 24 league matches thanks to substitute Gameiro.
Barca looked rampant at times in the first half, Messi putting them ahead with 14 minutes gone before Neymar followed suit just after the half-hour mark with a similarly stylish finish.
But a Claudio Bravo error allowed Ever Banega to net for the hosts seven minutes before the break, spurring Sevilla on for an improved display in the second half.
The hosts’ saw a couple of chances go begging, with Carlos Bacca the culprit on both occasions.
But the Colombian’s replacement, Gameiro, finished off a trademark counterattacking goal for Unai Emery’s side, blowing La Liga’s title race wide open following Real’s 3-0 defeat of Eibar earlier on Saturday and ending Barca’s nine-game winning streak in all competitions.
Barcelona, who now have a two-point cushion over Madrid at the top, unsurprisingly dictated play in the early stages, patiently probing as Sevilla sat back and looked for opportunities on the counterattack.
Sevilla’s numbers at the back seemed to be proving a frustrating obstacle for Barca, as Andres Iniesta and Neymar both forced Sergio Rico into easy saves with efforts from distance.
But the visitors eventually worked an opening in the 14th minute and it proved effective, as Messi cut inside Benoit Tremoulinas and curled a delightful effort beyond Rico to break the deadlock.
Barca’s intensity prevented Sevilla from gaining a foothold in the contest and they doubled their lead with 31 minutes on the clock.
Luis Suarez won a free kick from Grzegorz Krychowiak right on the edge of the area and Neymar sensationally arced an effort right into the top-left corner, far beyond the reach of Rico.
Sevilla were back in it seven minutes later, though, as Banega struck from 30 yards and beat Bravo, who failed to keep the ball out despite getting two hands to it.
Barca should have restored their two-goal advantage four minutes into the second half, but Suarez blazed over an empty goal from 18 yards after Rico rushed out to deny Iniesta.
Sevilla remained a threat on the break, though, and they crafted a decent opportunity six minutes later, but Bacca sliced over after working space for himself inside the area.
That proved to be Bacca’s final involvement before his 75th-minute withdrawal for Gameiro, with that change ultimately appearing a masterstroke from Emery.
Sevilla caught Barca on the break in lethal fashion with seven minutes to go, leaving Gameiro with an easy tap-in following Aleix Vidal’s lung-busting run, securing an unlikely draw for the home side, a result likely to be celebrated at the Santiago Bernabeu.