Increased code usually results in increase # of bugs, and this decreased the total code. If you ever mess up just one loop condition its going to be annoying to track it down.

Contrast:
for(var ix = 0; ix < 5; ix++) {
    for(var iy = 0; iy < 5; iy++) {
        for(var iz = 0; iz < 5; iz++) {
            DoStuff(ix, iy, iz);
        }
    }
}

With:
LOOP.For3D(new THREE.Vector3(0, 0, 0), new THREE.Vector3(1, 1, 1).MultiplyScalar(5), 
    DoStuff.bind(null, DoStuff));

It doesn't really matter which one you think looks nicer, the second is more versatile. If you want to change the range of the loop it 1 integer change. You can easily see it operates from (0, 0, 0) over a (5, 5, 5) cube.

Maybe with the simple gameplay we have now you don't think its a big deal, but once things reach any amount of complexity you are going to want to abstract these things out. And the greedy mesher is probably the most complicated (out of necessity, you try to do it with voxelization in a more clear manner) geometric manipulation code we have, so I needed it now.

And of course, once the code reaches the complexity of the greedy mesher you start to accumulate lots of these loops nested, so you can't even just name stuff ix, iy and iz. Even bx, by, bz is not enough because there may be multiple nested loops, and I am not going to add just one more letter as that is confusing as hell. So you will have stuff like planeX, planeY, planeZ, and then everywhere they are used you need to write all that crap.

When I have time I might rewrite the greedy mesher so it doesn't use THREE.Vector3 just to show you have a mess it becomes.