You need to use a different SpriteSortMode than Deferred (the default). SpriteSortMode can be set when you use a SpriteBatch.Begin() with a SpriteSortMode parameter.
With Deferred (the default) the order in which SpriteBatch.Draw() is called determines what overlaps what (what you call ordering the lines). If you use SpriteSortMode.FrontToBack or SpriteSortMode.BackToFront you can control the order they're drawn by the layerDepth parameter of SpriteBatch.Draw().
So what you'd do is you'd keep track of the value that responds to input and pass it to SpriteBatch.Draw(). For example you have a variable called float mySpriteZindex and if a certain button is pressed you increase or decrease mySpriteZindex. Then you can pass that value to SpriteBatch.Draw(), and now you have a way to control the order sprites are drawn in by variables.
.OrderBy()on the collection of sprites perhaps. - Magus