While I got no experience in Pyhton's C API I recently did a larger native library interface with Google's V8. Also there a function call from native code to script context takes several lines:
# having a persistent handle to a function (which blocks garbage collection for this)
# turn it to a "live" handle for the current execution context
# create a value list object for the arguments and initialize it with the arguments
# make the call (ignoring exceptions for simplicity)
# look what type the return value is and handle error if not.
# and when its valid turn it to its native representative
So for me there is some complication from native to script context in all environments I know of.
I prefer the V8 style to the stack style of Lua tough. I hate coding stack machines as it's error prone and hard to debug. While I still love my HP48G and it's reverse polish notation beyond quick hand calculations coding algorithms is hard. I remember the problems with my Lua/C interface of forgetting to popping one thing from the stack and run into overflow far down the line, or popping one too much and get an error somewhere else etc.