I'm drawing the geometry as a triangle strip, so—at least without duplicating *more* vertices—the winding needs to change depending on whether adjacent corners turn in the same or opposite directions. I've added a note below on this. In short, I don't think there's much value in preserving consistent winding order, so I didn't.
This was driving me crazy, so I renumbered all of the indices. Instead of changing the geometry like I was (which flipped winding), it now repeats/doesn't repeat a vertex at the beginning of the fan to get the orientation correct. That flips winding when needed but without modifying geometry, which is way easier to work with. Culling now works more reasonably! There are still a couple stray pixels on mobile. (see: https://rreusser.github.io/regl-gpu-lines/docs/tests.html) Not sure where they're coming from, but it's still an improvement.