It seems the C API for defining functions is not as complete as the one for defining types using jl_new_datatype. I once tried applying what’s done in add_builtin_func, but the result was a lot less flexible than what can be done by defining a function with different methods in Julia.
CxxWrap.jl allows defining functions from C++, but it cheats by feeding the data (function pointer, return and argument types) back to Julia and then using metaprogramming to create a new Julia function that makes the ccall. In case this fits your workflow, see here for a simple example:
C++:
https://github.com/JuliaInterop/CxxWrap.jl/blob/master/deps/src/examples/hello.cpp
Julia:
https://github.com/JuliaInterop/CxxWrap.jl/blob/master/test/hello.jl