Los Blancos were looking to get their campaign back on track and they were desperate to claim victory after Barcelona suffered defeat earlier in the day.
The visitors did not get off to the best of starts and they were forced into a change after 18 minutes as Dani Ceballos replaced the injured Casemiro.
However, Real took the lead in the 23rd minute as Luka Modric sent a ball over the top for Karim Benzema and the Frenchman held his composure to slot home.
The lead should have been doubled in the 35th minute when Benzema's cross deflected into the path of Toni Kroos, who blazed over the crossbar with the net gaping.
Real suffered another blow just before the break as Reguilon was forced off with an injury and replaced by Javi Sanchez.
The injury did not have an effect on the visitors as they bagged a second goal in the 56th minute when Benzema's hit the upright and then deflected in off Gustavo Cabral for the own goal.
Celta manged to pull a goal back five minutes later as Iago Aspas and Mendez combined to set up Hugo Mallo, who fired past Thibaut Courtois with a first-time volley.
Courtois had to be at his best on 70 minutes as the Real shot-stopper produced a good low save to deny Aspas from close range after the defence went to sleep.
Los Blancos were then awarded a penalty in the 83rd minute when Álvaro Odriozola was brought down in the box, which allowed Sergio Ramos to step up and convert to make it 3-1.
The clash ended on a sour note for the hosts as Cabral was given his marching orders after picking up a second yellow card.
There was enough time for a fourth goal as Ceballos ran at the Celta defence before rifling the ball into the top corner from 20-yards.
Celta did pull a second goal back in the third minute of time added on as Brais found the back of the net with a deflected effort, although Los Blancos held on for the win.