How about simply keeping a self-reference to the next object? That way, if you need to insert an object somewhere in the flow, you simply point the previous object to the new object, and the new object reference to the next object. In CS this is commonly referred to as a linked list, where every object has a reference to the next.
Looping through the stages would be as easy as simply retrieving the next association till the next association returns empty.
It's probably best to remove the validation rules and check those in your microflow. This way you can get to your microflow and do all your activies and then validate it and if needed throw a Validation message from there.
I still have to make sure that the stage-numbers are sequential, when adding a new object with number 2 for example, all the object that are equal or greater to 2 have to be incremented by one.
Solved it by removing unqiue requirement, retrieving all objects with stage-number equal or great to the new one and incrementing them by one. If I implement a linked list then not only do I have to maintain the self-reference but also amend the stage numbers.
Editing objects stage-number works by combining the delete microflow with the add microflow - however the delete behaviour that I have set up in the domain model breaks this sometimes.
So the user is allowed to create and delete an object with stage-number and caption. Editing is only possible in the form of changing the caption.