grow[f_fl] := Append[f, 1]+ (∑_(i=1)^(Length[f]))MapAt[(#+1)&, f, i];
grow[expr_] := Expand[expr /. f_fl :> grow[f]]

fl[] // grow

fl[] // grow//grow

fl[] // grow//grow//grow

sf[n_] := Module[{s=fl[]}, s+(∑_(k=1)^n)Expand[((s=grow[s])/(k!))]];

sf[3]

sf[2]

cop[f_fl] := Plus @@ (
(Pick[fl1@@f, #, 1]Pick[fl2@@f, #, 2])& /@ Tuples[{1,2}, Length[f]]
);
cop[expr_] := Expand[expr /. f_fl :> cop[f]]

cop[fl[1,2]]

cop[sf[2]]

sfsf[n_] := Module[{s},
s=sf[n]; 
(∑_(k=0)^n)Expand[(∑_(d1=0)^k)Times[
s /. f_fl :> If[(Plus@@f) == d1, fl1@@f, 0],
s /. f_fl :> If[(Plus@@f) == k-d1, fl2@@f, 0]
]]
]

cop[sf[2]]==sfsf[2]

cop[sf[3]]

sfsf[3]

cop[sf[3]]==sfsf[3]

cop[sf[7]]==sfsf[7]

sf[4]

Unprotect[NonCommutativeMultiply];
(a_Plus) ** b_ := (# ** b)& /@ a;
a_ ** (b_Plus) := (a ** #)& /@ b;
(a_.*fl[b___]) ** (c_. * fl[d___]) := a c fl[b,d];