Combo does precisely that - if you ask it to. I'll explain how that works.
First, λ-expressions are rendered in combinator form $λx·a = Λx·a$, where
$$
Λx·x = I,\quad Λx·a = Ka,\quad Λx·ax = a,\quad Λx·av = Bab,\\
Λx·xx = D,\quad Λx·xb = Tb,\quad Λx·xv = Ub,\\
Λx·ux = Wa,\quad Λx·ub = Cab,\quad Λx·uv = Sab,
$$
where $a$, $b$ are combinator terms with no occurrences of $x$ in them, $u$, $v$ are combinator terms each with at least one occurrence of $x$ in them, with $u ≠ x ≠ v$, and $Λx·u = a$ and $Λx·v = b$. This conversion is applied from bottom-up.
Denoting the normal form of a combinator expression $a$ by $[a]$, the following are used:
$$
[Ra⋯b] = [Ca⋯b],\quad [xa⋯b] = x[a]⋯[b],\quad [Aa⋯b] = Λy·[Aa⋯by],
$$
where $a$, ..., $b$ are combinator expressions, $x$ is a variable, $y$ is an otherwise-unused variable, and $A$ is a combinator followed by fewer arguments $a⋯b$ than it requires for reduction. The last clause is how the η-rule is implemented, if it is requested.
The relation $R → C$ is either a previously-encountered reduction (because no term is ever reduced twice) or else is an instance of one of the forms (assuming the specific instance hasn't yet been encountered):
$$
Ix → x,\quad Kxy → x,\quad Txyz → yx,\\
Dx → xx,\quad Wxy → xyy,\quad Uxy → y(xy),\\
Bxyz → x(yz),\quad Cxyz → xzy,\quad Sxyz → xz(yz).
$$
For instance,
$$\begin{align}
[S(Ka)I]
&= Λx·[S(Ka)Ix]\\
&= Λx·[Kax(Ix)]\\
&= Λx·[a(Ix)]\\
&= Λx·a[Ix]\\
&= Λx·a[x]\\
&= Λx·ax\\
&= a,
\end{align}$$
assuming $a$ is a free variable. Otherwise, more generally $[S(Ka)I] = [a]$.
A pre-condition for this to work consistently is that the abstraction conversion satisfy the property that $Λx·[ax] = [a]$, for all combinator terms $a$, particularly for the cases listed above, e.g. $[Bab] = Λx·[Babx] = Λx·[a(bx)]$, as is the case. At bare minimum, consistency requires that the identities $[S(Ka)I] = [a]$ and $[S(Ka)(Kb)] = [K(ab)]$ be true.
Following the approach by Barendregt, I believe that, in fact, the following
$$
SII = D,\quad Λb·SI(Kb) = T,\quad Λb·SIb = U,\\
Λa·S(Ka)I = Λa·a,\quad Λa·Λb·S(Ka)(Kb) = Λa·Λb·K(ab),\\
Λa·Λb·S(Ka)b = B,\quad Λa·SaI = W,\quad Λa·Λb·Sa(Kb) = C,
$$
along with
$$
Λa·Λx·I(ax) = Λa·Λx·ax,\\
Λa·Λx·D(ax) = Λa·Λx·ax(ax),\\
Λa·Λb·Λx·K(ax)(bx) = Λa·Λb·Λx·ax,\\
Λa·Λb·Λx·T(ax)(bx) = Λa·Λb·Λx·bx(ax),\\
Λa·Λb·Λx·U(ax)(bx) = Λa·Λb·Λx·bx(ax(bx)),\\
Λa·Λb·Λx·W(ax)(bx) = Λa·Λb·Λx·ax(bx)(bx),\\
Λa·Λb·Λc·Λx·B(ax)(bx)(cx) = Λa·Λb·Λc·Λx·ax(bx(cx)),\\
Λa·Λb·Λc·Λx·C(ax)(bx)(cx) = Λa·Λb·Λc·Λx·ax(cx)(bx),\\
Λa·Λb·Λc·Λx·S(ax)(bx)(cx) = Λa·Λb·Λc·Λx·ax(cx)(bx(cx)),
$$
should suffice as an equational axiomatization of the η-rule.
As yet, there is no co-inductive step, so if Combo encounters a reduction of the form $[a] = φ([a])$, where $φ(\_)$ is a context in some combinator expression, it will just simply stop and block the reduction ... because nothing is ever reduced twice. The correct way to proceed is to fold it into an infinitary λ-expression and re-write $a$ as $x: a$, and reduce $[a] = x:φ(x)$, where the occurrence of $x$ in the context $φ(\_)$ refers to the entire already-reduced expression $[a]$. For instance,
$$\begin{align}
[S(CBD)f]
&= [CBDf(CBDf)]\\
&= [BfD(BfD)]\\
&= [f(D(BfD))]\\
&= [f(BfD(BfD))]\\
&= f[BfD(BfD)]\\
&= x:fx,
\end{align}$$
assuming that $f$ is a free variable. This stands for the term $f(f(f(⋯)))$.
In particular, the normal form for $Y = S(CBD)$ would be
$$\begin{align}
[Y]
&= [S(CBD)]\\
&= Λy·[S(CBD)y]\\
&= Λy·x:yx\\
&= Λy·y(x:yx)\\
&= U(Λy·x:yx)\\
&= z:Uz,
\end{align}$$
where it applies another co-inductive step even during λ-abstraction, once it encounters $Λy·x$ a second time within its first encounter ... thus reducing $Y$ to $U(U(U(⋯)))$. So, the abstraction algorithm would require a co-induction rule of its own: that if $Λx·a = φ(Λx·a)$, then $Λx·a = z:φ(z)$.
If the co-inductive steps are permitted, the weirdest normal form would be for $Ω ≡ D D$. We have $[Ω] = [D D] = [D D] = x:x$. It loops on itself.