Why do we need two variables for implementing kleene star operation on a language using context free grammars?
In the general case, your grammar generates more words than those in $L^*$. Consider this grammar:
$$
\begin{array}{l}
    S \to A
\\
    A \to (S)\ |\ a
\end{array}
$$
The above grammar generates $L = \{ a, (a), ((a)), \ldots \}$.
Using Kleene's star, we get $L^* = \{a,aa,a(a), ((a))(a), \ldots \}$. Note that $(aa)\notin L^*$.
However, if we add your proposed productions, we get
$$
\begin{array}{l}
    S \to A\ |\ SS\ |\ \epsilon
\\
    A \to (S)\ |\ a
\end{array}
$$
whose language is $L' = \{a,(aa),((a)a)(a), \ldots \}$, and this is a strict superset of $L^*$.
Your construction looks correct in the cases where $S$ never occurs in the right-hand side of a production in the original grammar.