The Brazilian striker missed from the spot in the first half but netted either side of the break to draw his side back level on points with Barca at the top of the table.
Celta's consolation goal came from Nolito, but they were not able to grab a share of the spoils.
Valencia were denied a fourth straight league win as they were held to a 1-1 draw at Athletic Bilbao.
Ever Banega had given Miroslav Djukic's the lead at the end of the first half, but Mikel Rico cancelled it out with 14 minutes remaining.
The result means Athletic remain sixth, one place above Valencia thanks to a superior goal difference, with both teams on 13 points.
Getafe moved into the European places after beating Real Betis 3-1 at the Coliseum Alfonso Perez.
Luis Garcia's side scored three goals in 11 frantic first-half minutes - the first two coming from Pedro Leon, including a stunning 50-yard free-kick, while Adrian Colunga grabbed the third.
Betis had hopes of staging a comeback when Getafe defender Rafa scored an own goal early into the second period, but the hosts held firm to record their third straight victory.
Sevilla moved out of the relegation zone by beating local rivals Almeria 2-1 with a stoppage-time winner from Ivan Rakitic.
Kevin Gameiro had given a bright-looking Sevilla side an early lead but Rodri levelled midway through the first half.
Sevilla struggled in the second half until Rakitic converted from close range in the second minute of stoppage time to heap further agony on Almeria, who remain bottom of the league having conceded at least two goals in every game.
Furthermore, Francisco's side have now let in decisive last-minute goals in four of their eight league matches.