Have a page that pulls each of the possible options into a query.
For each option, display a text box with the current "order_number" (editable) and then the "module_name" (read-only) next to it in another text box. You can just encapsulate all of this in an html form, allowing the user to assign an order to each of the items, or change the existing order, and then let the user press 'save'. Take the order assigned to each of the modules, and write it back to the database. When you read it out for display, you can now order it by the order_id associated with each item. To store each user's preference, just make a simple table that has the userid in it, and then either a field with comma delimited ids (in the order to be displayed) for the modules so that you can link back to the module list table, or some other format of storing the order of the modules in a fieldset.
Obvisouly, there are any number of possibilities to do this, even just by changing one or two of the items within this suggestion, you can get several solutions, but this should work decently. Just make sure to define all possible uses of this 'listing' before you implement it, as you may see other uses or possibilities as you scope it out.