Just a brief followup, in case anyone stumbles upon this and wonders.
The above bindings do work and effectively rely on the same pattern, which is based on the fact that a command line is saved to history even if you escape out of the command line and don't execute it.
They're all variations of entering the command line with : and/or escape out with <esc>, recall the last line from the command line history with <c-p>, and do something with it like insert the current entry with <c-x>c.
The first '+' mapping you use in normal mode, which has the advantage of having all normal mode features available, like jumping around in the list, searching, filtering and so forth. The disadvantage is that you can only append to your list of files on the command line, because the history doesn't memorize cursor positions, so <c-p> always makes the cursor jump to the end of the line.
The other two mappings you use in command line mode to move the cursor up and down in the view, meaning you escape out, move the cursor, then enter command line mode again followed by a <c-p> and can then insert the current entry manually with <c-x>c.
The latter has the disadvantage that you effectively end up re-implementing normal mode motion commands in a very limited fashion, but you can, once you put the cursor on the entry you want, then move the cursor around in the command line and do the insertion anywhere you want, like when you want to preprend to your list of files. So realistically one would probably use all three of those bindings and become accustomed to the workflow.
As to Lua, you can for example implement the cursor motion commands, presumably without leaving command line mode, by assigning to vifm.currview().cursor.pos, but I don't see much of a benefit. How this may work, generally, can be gathered from the 'recent-entry' plugin example in the vifm source tree.
Another approach which seems to have some appeal is to write a wrapper script which allows you to edit/sort the current selection in a file and then use that to run a command on it. Like
#!/bin/sh
# needs command to run plus at least one file argument as params
[ $# -lt 2 ] && exit
file=/tmp/vifm-tmpfile
cmd="$1"
shift
ls -1d "$@" > $file
vi $file
lines=`wc -l $file | cut -d' ' -f1`
[ "$lines" -gt 0 ] || exit
cat $file | xargs -d'\n' "$cmd" &
Call that script vifm-run for example, put in in your scripts directory and then define
command! vmpv vifm-run mpv %f
That way you can run mpv on any selection, with :vmpv, after having edited/rearranged that selection in vi. That may actually end up being my preferred solution.