No, I don't believe you're missing anything here, Patrick. In general, the only variable "types" which are supported as arguments to nimbleFunctions are "integer", "double", and "logical". The flexibility of providing a "function" argument is not supported.
There is a more involved workaround that could perhaps help, for example using a nimbleFunctionList inside your main nimbleFunction, which contains a list of (different) nimbleFunctions. Then, you would pass an integer-valued argument "ind" into your main nimbleFunction, and depending on the value of "ind", access and use a different member of the nimbleFunctionList (hence, using a different function inside your nimbleFunction, based upon the value of the argument "ind"). This helps somewhat, however still restricts you to the set of functions defined in the nimbleFunctionList (which must be defined prior to compilation), so it's not fully generic in that you could not pass *any* function into your function as an argument.
What you're doing, defining a separate nimbleFunction outside, then using that inside your nimbleFunction of interest is the generally supported usage of "nested nimbleFunctions". My suggestion above allows a bit more flexibility, to using a predefined set of > 1 nimbleFunctions. I think those are your best options that immediately come to mind.