Passing function addresses as parameters is easy. It's more difficult to return a nested function that closes over the outer function's variables.
Passing or returning first-class functions aren't a problem. First-class closures (function pointer + state) are.