The algorithm finds a local optimum of the positions.
As it does that, it needs to have some initial positions. You can control that as much as you like.
It also allows you to fix some of the point's positions so the local optimum is constrained by those positions.
That's the interface you can work with.
The most common use I've seen for initial positions is to find new layouts after a change in the graph structure -- like removing an edge. Most of the network stays in the same position, but the impact of removing that edge makes a local difference that can be quite large.
I don't understand what you are trying to do, but that's OK... You do. And now you know what is possible and how the algorithm works and what it's parameters are. Hopefully you can find a way to do what you want. It should not be too surprising that random initial points can make a huge difference in the resulting layout. Try a simple graph like nx.path_graph(6) and draw it multiple times. The layouts are very very different. It's all due to different initial positions of the nodes. If you want consistency, you should not use completely random initial positions... Perhaps randomness can be involved, but you should constrain the positions to ensure consistency -- maybe set the nodes into a circle shape with random tweaks around that shape. By controlling the input "pos" parameter, you can probably make the algorithm solve whatever you want to do with it. Set some initial values to random values, and others to fixed values. It is very flexible.