First, one reduction is not strictly necessary, but will simplify what comes next: we observe that if the integration by parts formula holds for a single primitive $F$ of $f$, then it holds for every primitive, since if $\hat{F}=F+C$, then
\begin{align*}
\int_a^b\hat{F}g &=
\int_a^bFg+C\int_a^bg=\left(F(b)G(b)-F(a)G(a)-\int_a^bfG\right) +C(G(b)-G(a))\\ &= \hat{F}(b)G(b)-\hat{F}(a)G(a)-\int_a^bfG,
\end{align*}
and we may reason similarly for $G$.
Therefore we proceed as you have, assuming $f$ and $g$ are constant on $(a,b)$, say $f\equiv C_f$ and $g\equiv C_g$. By the preceding remark we may without loss of generality assume $F(x)=\int_a^xf= C_f(x-a)$, $G(x)=\int_a^x g=C_g(x-a)$. Then
$$\int_a^bF=C_f\frac{(b-a)^2}{2},$$
$$\int_a^bG=C_g\frac{(b-a)^2}{2},$$
whereby we obtain
\begin{align*}
\int_a^bFg+\int_a^b fG &=C_gC_f\frac{(b-a)^2}{2} + C_fC_g\frac{(b-a)^2}{2}\\
&=C_fC_g(b-a)^2 = F(b)G(b)\\ &= F(b)G(b)-F(a)G(a).
\end{align*}
Next, if $f$ and $g$ are step functions, then subdivide $[a,b]$ into $a=t_0<\dots<t_n=b$ so that $f$ and $g$ are constant on each $(t_i,t_{i+1})$, $0\leq i<n$.
From the preceding result we have
\begin{align*}
\int_a^bFg+\int_a^b fG &=
\sum_{i=0}^{n-1}\left( \int_{t_i}^{t_{i+1}} Fg + \int_{t_i}^{t_{i+1}}fG\right)\\
&=
\sum_{i=0}^{n-1} \left(F(t_{i+1})G(t_{i+1})-F(t_i)G(t_i)\right)
=F(b)G(b)-F(a)G(a),
\end{align*}
so the theorem is proved for step functions.
Finally, we extend the result to the general case by approximation in the mean. In what follows, we will use that the absolute value of an integrable function is integrable, and that the product of Riemann integrable functions is integrable.
Now if $f$ is a general (Riemann) integrable function, then let $f_i$ be a sequence of step functions approximating $f$ in the mean, i.e., $\int_a^b |f_i-f|\to 0$. Note then that the primitives $F_i(x):=\int_a^xf_i$ converge uniformly to $F(x):=\int_a^x f$, so we have
$$\int_a^b|F_i-F|\cdot|g|\leq \left(\sup_{[a,b]}|F_i-F|\right) \int_a^b |g|\to 0 \implies \lim_{i\to\infty}\int_a^bF_ig=\int_a^b Fg,$$
and moreover, since $G$ is continuous (hence bounded on $[a,b]$), we have
$$\int_a^b |f_i-f|\cdot|G|\leq \left(\sup_{[a,b]}|G|\right)\int_a^b|f_i-f|\to 0 \implies \lim_{i\to\infty}\int_a^b f_i G=\int_a^b fG.$$
Therefore
\begin{align*}
\int_a^b Fg +\int_a^b fG &=\lim_{i\to\infty} \left(\int_a^b F_ig +\int_a^b f_iG\right)\\
&=\lim_{i\to\infty} \left(F_i(b)G(b)-F_i(a)G(a)\right)=F(b)G(b)-F(a)G(a),
\end{align*}
so the result holds for an arbitrary integrable $f$ and step function $g$, and the same argument extends the result to arbitrary integrable $g$.
Remark
One might protest that we cheated by assuming that when $F(x)=C_f(x-a)$, then $\int_a^b F = C_f\frac{(b-a)^2}{2}$. After all, this is often demonstrated using differentiation and the fundamental theorem of calculus, which we have arguably foresworn in this problem.
However, using the fact that continuous functions are Riemann integrable, one can also establish this result directly by partitioning an interval $[a,b]$ into $n$ subintervals of length $\frac{b-a}{n}$, and
estimating
\begin{align*}
\sum_{i=1}^n (t_i-t_{i-1})F(t_i) &= \sum_{i=1}^{n} \frac{(b-a)}{n}\cdot C_f\left(a+\frac{i}{n}(b-a)-a\right)\\
&=C_f\frac{(b-a)}{n}\cdot\left(\frac{n(n+1)}{2n}(b-a)\right)\\
&= C_f\left(\frac{n+1}{n}\right)\frac{(b-a)^2}{2}\to C_f\frac{(b-a)^2}{2}.
\end{align*}