Your code dynamically constructs a string representing a filter expression. Great. You now need to evaluate it as a filter expression.
The first filter evaluation constructs your filter expression, the second evaluates it.
Try this:
<$let
in="simple-words, some text, to-do"
pat=(\w)(\w*)(-+)(\w)(\w*)
rep="[[$1]uppercase[]addsuffix[$2]addsuffix[$3]] [[$4]uppercase[]addsuffix[$5]] +[join[]]"
>
<$text text={{{
[<in>search-replace:gm:regexp<pat>,<rep>] :map[subfilter<currentTiddler>]
}}}/>
</$let>