There are more input types, which you can determine by testing various types and seeing what Mathcad does (and crashing everything a few times!). The attached file has details of the ones I found. I couldn't find any way of returning a string. These types allow you to specify more tightly what the function will accept (e.g. a vector of reals), which can be handy for removing surplus checks from a function, but do not allow you to return anything more complicated because the allocation functions only work for the most generic types -- but that shouldn't be a problem as Mathcad will re-format as required anyway.
You can pass strings indirectly. Use str2vec to convert the string to a vector, then pass the vector and convert it back to a string in your function. The reverse also works -- convert a string to a vector in your function, pass the vector to Mathcad, then use vec2str to convert it back to a string.