Can jupyterlab have both local and remote kernels

Yes that’s correct, at least based on my experience. Once you configure jupyterlab (I’ve specifically used lab 3.x and jupyterserver 1.x) with --gateway-url, all kernel requests and interactions go through the gateway server. I believe provisioners are attempting to solve the use case of local + remote kernels but I haven’t tried them myself. Outside of them, you could do something like Google does and multiplex the requests to local jupyterserver + remote Enterprise Gateway (ref).

If you do implement either approach I’d be very curious to hear how it goes!