Ok, being a programmer, I generally assume I can mess with loop variables to control a loop.
But I am quite certain at this point that M&B's (try_for_range, ":index", ":start", ":one_past_end") construct overwrites ":index" on every iteration, so you cannot break out of the loop by setting its value to past the end, nor can your force it to loop over the same index a second time by subtracting one from it, &c.
But what does work is messing with the termination value ":one_past_end". If you reset this to a lower number, say set it to ":index", then you force the loop to stop.
This is far less useful than being able to mess with ":index", but this appears to be another limitation of their engine.
Make a note of this, and avoid bugs
This is true, but you can
change the value of ":index" while inside an iteration, and you can use a variable or script that isn't ":index" (but may or may not take its value from ":index") inside the loop, which will not reset with each iteration. You can also keep the loop going as long as you need it to by increasing ":one_past_end". So, if as you say you want to loop over an index again, use a different variable from ":index" for determining which value to use.
-use ":index" here-
(eq,":example",":repeat_last"), # If you want to repeat the previous index
(val_sub,":index",-2), # Repeat previous index
(eq,":end",":now"), # If end is now
(assign,":high",":range"), # End loop