Messi was introduced after an hour at the Stade Balaidos and looked to have inspired another Barca victory when Paulinho gave the visitors a 2-1 lead four minutes later.
But Sergi Roberto was sent off for preventing Iago Aspas sprinting clear and in the 82nd minute the former Liverpool striker made it 2-2, albeit with a large slice of luck given the ball brushed his hand on its way into the net.
Vigo pushed for a late winner and should have had it when substitute Lucas Boye went through one-on-one but he took too long and Marc-Andre Ter Stegen made a crucial stop.
"I think we deserved to win the game," Celta Vigo coach Juan Carlos Unzue said.
Earlier, a superb strike from Ousmane Dembele had been cancelled out by Jonny Castro's close-range finish as Barcelona stretched their record unbeaten run to 40 La Liga games.
They also extend their lead at the top of the table to 12 points, which could be cut to nine if Atletico Madrid beat Real Sociedad on Thursday.
Messi hat-trick helps Barcelona equal record unbeaten streak
"You always have to accept a point but our intention was to win," Barca coach Ernesto Valverde said afterwards.
"When we lost Sergi, we had difficulties but it is one more point. We need only two more victories and we have to fight for them."
With one eye on Saturday's Copa del Rey final against Sevilla, Valverde made several changes to his Barca starting line-up as the likes of Messi, Luis Suarez, Gerard Pique, Samuel Umtiti, Sergio Busquets and Ivan Rakitic were all rested.
"There were players who came from playing a lot of games and I thought it suited us," Valverde said. "Let's see if we can give our fans some joy on Saturday."
Ter Stegen, Philippe Coutinho and Dembele were the more established names selected and Dembele took his chance, capping an excellent attacking display with a brilliantly taken goal in the 39th minute.
Coutinho played wide to Paco Alcacer whose return ball was bouncing as Dembele controlled and sent a dipping half-volley into the corner.
On the stroke of half-time, however, Vigo were level. Andre Gomes gave the ball away and then, after the break developed, allowed Maximiliano Gomez to fire in a cross, which Castro bundled in.
Messi came on in the 60th minute for Coutinho and by the 64th, Barca were ahead.
Dembele did well to make space down the right and as goalkeeper Sergio Alvarez failed to collect, Paulinho was perfectly placed to divert towards the corner, with Alcacer perhaps even feathering a final touch.
De Rossi hails coach as Roma stun Barcelona
Roberto had also been introduced on the hour, replacing Gomes, but he lasted only 11 minutes, sent off for tugging back Aspas when the striker was in on goal.
Aspas bent the resulting free-kick just over the bar but eight minutes from the end he was celebrating as Ter Stegen could only parry Emre Mor's cross and as the ball spun up, it brushed Aspas' chest, hand and floated into the net.
Barca were now holding on and Vigo should have won it when Aspas played Boye in behind but his team-mate was denied by Ter Stegen and the chance was lost.
COMMENTS
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ