The Brazilian attacker netted twice to end the Santiago Bernabeu side's hopes of winning the domestic league, with Barcelona and Atletico Madrid set to face off in a decider
Charles opened the scoring shortly before the break after some sloppy defending from Sergio Ramos and the striker got his second goal of the game around the hour mark to effectively put the match to bed.
Back-to-back draws with Valencia and Real Valladolid left Madrid needing to win their two remaining fixtures and hope that Atletico - with a better head-to-head record against their city rivals - slipped up in both of theirs.
But despite Atletico only drawing at home to Malaga, Carlo Ancelotti's men are now out of the running after failing to do their part.
Real's defenders were their chief culprits, as mistakes from Sergio Ramos and Marcelo helped Charles to perhaps the simplest double of his career.
All eyes will now turn to the Camp Nou, where defending champions Barcelona will host Atletico in a mouth-watering championship decider next weekend.
Barcelona, who are three points adrift in second, will win the league with a victory while Atletico need only to avoid defeat.
Real were hampered from the off, with a thigh injury ensuring that Cristiano Ronaldo could not even take a place on the bench.
Fellow big-money recruit Gareth Bale was among the substitutes, while Sami Khedira started a game for the first time since damaging knee ligaments in November.
It was the visitors who started on the front foot, their first opening coming when Marcelo's powerful half-volley was deflected just wide.
But Celta began to press thereafter, with Fabian Orellana looking particularly threatening.
Ancelotti's side defended impressively to weather that spell without giving up any real chances and gradually began to impose their will on the game.
Their attacking intent almost led to an opener in the 35th minute, Isco forcing a superb reaction save from Sergio Alvarez with a low effort.
Another chance went begging when Alvaro Morata fired Marcelo's low cross wide - and Real were left to rue their profligacy as the home side took the lead three minutes before the break.
Ramos was the culprit, his slip leaving Charles to round Diego Lopez and slide the ball into the empty net from a tight angle.
As expected, Real came out positively after the break and almost levelled matters when Luka Modric shot over in the process of being brought down in the area by Jon Aurtenetxe, the referee turning down strong penalty appeals.
Undeterred, the visitors pressed forward further, with Morata and Isco again testing Alvarez.
But the latter's chance, in which he shot straight at the goalkeeper, prompted an immediate reply as Celta increased their lead.
Marcelo was at fault this time, selling Lopez short with an awful back-pass that allowed Charles to nip in and grab his second.
Real pushed desperately to get back into it late on, but the inspired Alvarez combined with some dogged defending to keep them out.