It’s a nice presentation. For instancing - you only get repetition of geometry per shader, no more. Which means that same geometry can be rendered multiple times using the SAME shader.
If you want to LOD your vegetation in the same way as described in the paper, you need to have several draw calls, at least one per shader. Beyond this - it’s a matter of what you want to represent your vegetation clusters as, you could potentially have geometry be a single quad, and just instance that, and have more instances or less per cluster, but that would require a lot of CPU work.
A better option, if you want instancing is to have separate instance group per lod level. This would require custom culling code for three.js though.
I have frustum culling for instanced geometry in meep, it was relatively easy to implement. You have have a look at my earlier demo for the results as well.
All in all, it’s about driving shader complexity down, driving down number of polygons, and finally number of draw calls.
I would not get too obsessed with number of draw calls, having 3 draw calls per foliage type for LODs is a relatively trivial amount in my estimation.