It works ok if the function is named MyFunc$ so that it can return a string. Set Debug mode, and check the output.
Here's my test
GLOBAL w$[]
GLOBAL t$[]
LOCAL m$
DIMPUSH t$[], "123"
DIMPUSH t$[], "456"
DIMPUSH t$[], "789"
m$ = MyFunc$("abc")
DEBUG m$ + "\n" //<-- outputs "helloabc"
DIMPUSH w$[], MyFunc$(t$[1])
DEBUG w$[0] + "\n" //<-- outputs "hello456"
FUNCTION MyFunc$: tt$
LOCAL x$ = "hello"
x$ = x$ + tt$
RETURN x$
ENDFUNCTION
Edit: I always make my empty arrays global so I can use then inside functions. Not in this case, but it's a habit.