1) As we don't handle "complete lists", there is an issue with "empty lists". If there is no instance flowing, the flow is not triggering anything, and then you need a special exit like "Not Found" (or, alternatively, use "Exists" to test the output for the existence of at least one instance).
2) What you call "automatic conversion from list of X to X" is simply a side-effect of the behavior when multiple inputs are accepted at a not-repetitive target. We could have issued a warning message in such cases, but we found it to be a useful shortcut (e.g. if you have an error exit that should be activated if any error message arrives from one of several sources within the process).
4) Your last point relates to the runtime implementation. While the semantics is that of a stream, in reality we indeed accumulate all instances in a repetition before acting on each of them. Therefore, your suggestion to implement repetitions using streams (for scalability) is well in place.