As already mentioned, it is an easy exercise to show that a group containing a residually finite subgroup of finite index is itself residually finite. But proving that free groups are residually finite is (standard but) not so easy. There exist several possible arguments. Here are two of my favourites.
First proof. As motivated in Stallings' excellent article Topology of finite graphs, one can prove many properties of free groups of finite ranks by doing some elementary algebraic topology on finite graphs.
Let $g$ be a non-trivial element of a free group $F$ of finite rank. Let $B$ be a bouquet of $\mathrm{rk}(F)$ oriented circles, each one labelled by a generator of $F$. Write $g$ as a reduced word and let $X$ be a (subdivided) path whose oriented edges are labelled by generators in such that the reading $X$ yields $g$. There is a map $X \to B$ that sends each edge of $X$ to the edge of $B$ having the same label. Because our word is reduced, the map $X \to B$ is locally injective. Now, add edges to $X$ to get a covering $X' \to B$. This is possible because, in order to get a covering of $B$, it suffices to have, for each vertex $v$ and for each generator $s$, one (half-)edge labelled $s$ leaving $v$ and one (half-)edge labelled $s$ arriving at $v$. Then the image of $\pi_1(X')$ in $\pi_1(B)$ yields a finite-index subgroup $H$ in $F$ that does not contain $g$ (because $g$, thought of as a loop in $B$, lifts to a path in $X'$ that is not a loop).
Second proof. Instead of proving that free groups are residually finite, we can prove that the Coxeter group
$$W_n:= \underset{n \text{ free factors}}{\underbrace{\mathbb{Z}/2\mathbb{Z} \ast \cdots \ast \mathbb{Z}/2 \mathbb{Z}}}.$$
is residually finite (since it is virtually free). The key observation is that the Cayley graph of $W_n$ with respect to its canonical generating set is a tree $T_n$, that vertex-stabilisers are trivial, and that $W_n$ acts on $T_n$ by reflections: each edge is flipped by an element of order two. Now, let $g \in W_n$ be a non-trivial element. Fix a path $P$ between the vertices $1$ and $g$ in $T_n$, and let $E$ denote the collection of all the edges of $T_n \backslash P$ with one endpoints in $P$. By an easy ping-pong argument, we can prove that $H:= \langle \text{reflection along } e, e \in E \rangle$ acts on $T_n$ with $P$ as a fundamental domain. It follows that $H$ has finite-index (since $P$ is finite) and that $g$ does not belong to $H$ (since $h P \cap P= \emptyset$ for every non-trivial $h \in H$).
Remark. Observe that, in the two arguments, the construction of the finite-index subgroup $H$ is explicit once $g$ is given. In particular, its index is controlled by the length of $g$.