This is a nice summary of the options! A PR to the docs for advanced coding techniques is welcomed!
One comment on the use of lambdas with functions expecting a C function pointer: be careful when passing lambdas to functions taking a C-style function pointer - the lifetime of the lambda may be shorter than the pointer is retained by the function. This is particularly true when the lambda is allocated on the stack.