There's a small detail I'm still not convinced I understood well. My work from the beginning to the point I got stuck is the following.
Let $\lim_{x\to a}f(x) = L$ and $\lim_{x\to a}g(x) = M$
\begin{align}
\lim_{x\to a}[f(x)g(x)] = LM \space \space so \space\space \forall \varepsilon \gt 0, \exists \delta \gt 0 \space\space s.t \space\space 0 \lt |x-a| \lt \delta \implies |f(x)g(x) - LM| \lt \varepsilon \end{align}
Working with $\varepsilon$ inequality:
\begin{align}
\|f(x)g(x) + L \cdot g(x) - L \cdot g(x) - LM| \\
\end{align}
\begin{align}
& = \|g(x)[f(x) - L] + L[g(x) - M]| \\
\end{align}
\begin{align}
& \le \|g(x)[f(x) - L]| + |L[g(x) - M]| \\
\end{align}
\begin{align}
& = |g(x)||f(x) - L| + |L||g(x) - M| \lt \varepsilon.
\end{align}
But we need $|g(x)||f(x) - L|$ and $|L||g(x) - M|$ to be both less than $\frac {\varepsilon}2$, so:
$|L||g(x) - M| \lt \frac {\varepsilon}2 \implies |g(x) - M| \lt \frac {\varepsilon}{2 \cdot |L|}$. To avoid the possibility of having division by $0$ when $L = 0$, add $1$ to $|L|$ term to make the demominator greater than $0$.
Thus $|g(x) - M| \lt \frac {\varepsilon}{2 \cdot (1 + |L|)}$.
Since $\lim_{x\to a}g(x) = M$, there exists $\delta_1 \gt 0$ $\space$ such that $\space$ $0 \lt |x - a| < \delta_1 \implies |g(x) - L| \lt \frac {\varepsilon}{2 \cdot (1 + |L|)}$. There will also exist $\delta_2 \gt 0 \space$ such that $\space$ $|g(x)||f(x) - L| \lt \frac {\varepsilon}{2}$ as $\lim_{x\to a}f(x) = L$.
This point is where I am a bit confused. We need to bound $|g(x)|$ in order to avoid dealing with variables just as $x$, but in many resources I read, they just set $|g(x) - M| \lt 1$ to finally get $|g(x)| \lt 1 + |M|$. As far as I know, that happens because we set $\varepsilon = 1$ now, but won't that restrict the rule for certain values of $\varepsilon$? How does this work?
By $\forall \varepsilon > 0$ what we really care about are the arbitrarily small $\varepsilon$, so their argument considering $|g(x)-M|<1$ holds. Continuity is all about how functions get bounded more and more for smaller $\varepsilon$ so discarding the large $\varepsilon$ that bound $g$ poorly doesn't matter.
You also don't have to worry too much about the $L=0$ case because if it arises then you'll want to show $|f(x)g(x)|<\varepsilon \ \Leftrightarrow \ |f(x)||g(x)|<\varepsilon$. This is the same problem because $f(x) \to 0$ as $x \to a$ and you want $g$ to be bounded.