Valencia had been rejuvenated under coach Juan Antonio Pizzi since he took over at the end of 2013 and pushed towards European qualification, while their opponents were looking at the other end of the table.
But despite going behind to a Dani Parejo goal after 23 minutes they did not lose heart, Charles netting twice (50 and 78) to earn them three important points.
Valencia could have taken the lead after six minutes but Pablo Piatti shot wide from six yards.
In the 10th minute Augusto Fernandez had a chance for Celta but his shot from 25 yards was parried by Diego Alves.
Celta goalkeeper Yoel then punched clear a corner before Jonas shot off target for Valencia.
The home side went close when Charles brought a fine save out of Diego Alves and Fabian Orellana then shot over the bar as Valencia came under more pressure.
Valencia took the lead in the 23rd minute when Parejo headed in from close range from a right wing cross by Sofiane Feghouli.
Three minutes later Jonas almost doubled the lead, but his shot from close range was parried by Yoel.
Feghouli shot wide from distance just after the half hour as Valencia tried to extend their advantage.
Celta were level five minutes into the second half when Charles scored from close range after being set up by Rafinha.
Just after the hour Fernandez brought a good save out of Diego Alves with an angled shot from close range.
As the half wore on Celta pressed for the winner and Orellana forced a fine save out of Diego Alves.
With 12 minutes to go Celta got the goal their pressure warranted when Charles shot powerfully into the top corner from 20 yards.
Celta twice went close to adding a third as first Nolito saw his shot hit a post and then Santi Mina shot over the bar.
Feghouli nearly made them pay when his header hit a post and Sergio Canales fired the rebound over the bar.
But Diego Alves had to make two saves late on to ensure Valencia did not lose by a greater margin.