Every CFL language can be describes as a PDA. Every regular language can be described as a DFA.
The orthogonal product of a DFA and PDA can be defined as follows:
The new states of the automaton are all $(q_{PDA}, q_{DFA})$. That start state is $(s_{PDA}, s_{DFA})$ and the final states are all $(f_{PDA}, f_{DFA})$ where $f_{PDA}\in F_{PDA}$ and $f_{DFA} \in F_{DFA}$.
Given the transition of the PDA defined as $\delta_{PDA}(q_{PDA}, stack_{PDA}, a) = (q'_{PDA}, stack'_{PDA})$ and transition function of the DFA $\delta_{DFA}(q_{DFA})$
The transition function $\delta(q, a)$ for the new Automaton is where the transition function of the PDA is defined defined as $\delta((q_{PDA}, q_{DFA}), stack_{PDA}, a) = ((q'_{PDA}, \delta_{DFA}(q_{DFA})), stack'_{PDA})$
(in laymans terms, split out the states simulate the DFA and PDA independently and only accept the language when both are in a final state)
There is only 1 stack in this automaton. Thus it is a valid PDA. Therefor the language described by the intersection of a CFL and a regular language is a CFL.
The reason this does not hold for the intersection of 2 CFLs is because you need a second stack for second PDA.