Using a Least-Common-Sequence algorithm such as that employed by benjamine/jsondiffpatch or Polymer/observe-js you can avoid having to recreate the elements on each reposition. You'd just need to apply the appropriate splices (or adds/removes) and only need to recreate views for newly added elements.
I've seperated the array diff/patch algorithms from jsondiffpatch in this library. (doesn't work with current versions of reactive though) which may be useful.