How do I allow users to rearrange the fields order during content creation?
If you want per-node changing of field display order I recommend looking at Panelizer module. It takes over view modes at the level of entity bundles (content types) and additionally individual entities.

It is not an exact fit of what you describe in that:


It works on an interface separate from content creation.
It is view
mode specific. So rearranging one view mode (teaser) will not change
the full view mode. That might be good or bad depending on what you
want.