Oh no I was discovered! I tried your example in CodePen and it seems like the solution I posted works but only for non-indexed geometries
In your last example under

geometry.scale(-1, 1, 1);

add

geometry = geometry.toNonIndexed();

To make it work for indexed geometries index attribute should have its elements swapped from ABC to CAB and other attributes don’t have to be modified

Edit: I added a version for indexed geometries. It’s much simpler but I haven’t tested too much if i.e. UVs work as expected

function handleInvertedGeometry(geometry) {
const index = geometry.index.array
for (let i = 0, il = index.length / 3; i < il; i++) {
let x = index[i * 3]
index[i * 3] = index[i * 3 + 2]
index[i * 3 + 2] = x
}
geometry.index.needsUpdate = true
}