Please note that JMP14 classes are not fully functional and you might be burned if you rely on them too heavily; however, in JMP12+ you can create classes (including inheritance, constructors, destructors, etc.) with namespaces and some meta-programming.
To answer the OP's initial question -- you can achieve your goal with only minimal edits to your script -- just note that the return value from a JSL function is evaluated (with the Eval() statement) before being returned. Thus, if your last statement is an unevaluated expression (such as an Expr( Function( _definition_ ) ), then it will return the function as intended. Only a slight trick in the second function is needed to be able to call the function (the "fun = fun" statement).
funWrapper = Function({array, fun},
fun = fun;
fun(array);
);
funFunctional = Function({offset},
Substitute(
Expr(
Function({x},
x + _offset_;
)
)
,
Expr( _offset_ ), offset
)
);
funWrapper([1,2,3], funFUnctional(2));
Jordan