Another approach uses the representation of the dual $\left[ L^1(\mathbb{R})\right]^\star$ as $L^\infty(\mathbb{R})$ and the Hahn-Banach separation theorem. Namely, to prove that a vector subspace of a Banach space is dense we only need to show that the only continuous linear functional that vanishes on it is the null one.
To do this fix $\phi \in L^\infty(\mathbb{R})$ and suppose that
$$\tag{1}\int_{-\infty}^\infty \phi(x)f(x)\, dx=0, \quad \forall f\in C_c(\mathbb{R}).$$
We claim that $\phi=0$ almost everywhere. Indeed, let $a<b$ be fixed numbers. Approximate the characteristic function $\chi_{[a,b]}$ with a family $\chi^{(\varepsilon)}_{[a, b]}$ of "trapezoidal-like" functions:
We have
$$\int_{-\infty}^\infty \left\lvert \chi_{[a,b]}(x)-\chi_{[a,b]}^{(\varepsilon)}\right\rvert\, dx = 2\varepsilon$$
so
\begin{align}
\left\lvert \int_{-\infty}^\infty \phi(x)\chi_{[a,b]}(x)\, dx - \int_{-\infty}^\infty \phi(x)\chi_{[a, b]}^{(\varepsilon)}(x)\, dx \right\rvert & \le \lVert \phi\rVert_{\infty} \int_{-\infty}^\infty \left\lvert \chi_{[a,b]}(x)-\chi_{[a,b]}^{(\varepsilon)}(x)\right\rvert\, dx \\
&=2\varepsilon \lVert \phi\rVert_\infty.
\end{align}
In particular,
$$\int_a^b \phi(x)\, dx=\lim_{\varepsilon \to 0} \int_{-\infty}^\infty \phi(x)\chi_{[a,b]}^{(\varepsilon)}\, dx,$$
and the last limit is $0$ due to our assumption (1): indeed, every $\chi_{[a, b]}^{(\varepsilon)}$ is a continuous function with compact support. We have thus shown that
$$\tag{2} \int_a^b\phi(x)\, dx=0, \qquad \forall a<b.$$
It is intuitively clear that this can happen only if $\phi=0$ almost everywhere: for a rigorous proof of this you can apply the Lebesgue differentiation theorem or Lemma 1 of this post. This proves the claim.
To conclude we only need to recall that every continuous linear functional $\Lambda \in \left[ L^1(\mathbb{R})\right]^\star$ is of the form
$$\Lambda f= \int_{-\infty}^\infty \phi(x)f(x)\, dx,\qquad f \in L^1(\mathbb{R}),$$
for a unique $\phi\in L^\infty(\mathbb{R})$, and then apply the Hahn-Banach separation theorem. $\square$
A final remark: Even if we did not mention convolutions explicitly, the present proof is not that different in nature from the ones presented above. Both rely on the possibility of approximating "rough" functions (like our $\chi_{[a, b]}$) with "smooth" ones.