you can use a comparable-interface to order the list to your needs automatically.
Or you can use the build in sort possibility of rich:listShuttle (first, up, down-buttons) for manually ordering. Look at the demo of rich:listShuttle.
The items in the list already implement Comparable and the lists start off sorted but if an item in the source list is moved to the target and then out again it is placed at the bottom of the source list.
I don't want the user to have to manually order the source list by pressing the change-order buttons.
Such feature is not available out of the box.