How should this work... literally.
The only thing that I can think of that would be "good enough" is a separate SelectableEntityArgument class which would be parsed and the results will be an array of results.
The array will contain entities that satisfied the conditions given by the user... such as name, limit, etc.
This would also involve running onRun several times for each argument that is selectable and for each of its results. Then $args["argumentName"] will contain an entity for every iteration.
This is a simply but effective way of doing it, but I still have some thoughts that it's dirty.
Leave suggestions below...