Meep has culling in its Instancing implementation. It’s called Foliage there, which is a bit misleading, since it’s generic instanced meshes.
Here’s an example with 10,000,000 instances running at stable high FPS using meep: