eio itself doesn’t, and the main backends (eio_linux, eio_posix, eio_windows) all define a Low_level API that treats the network and filesystem as global variables, like Lwt does, and then add a capability layer on top of that.
However, you will likely find programming much easier without globals everywhere, so I would encourage giving it a try first! Every program I’ve converted from Lwt to Eio got quite a bit shorter, so whatever the pain is, it’s less than the pain of using Lwt.
The Lambda Capabilities blog explains why you usually don’t want to hide references, and gives some reasons why it shouldn’t be a problem (and how to do it if you still want to).