Streaming from all the physical nodes in the cluster should make repair faster, for the same reason it makes bootstrap faster. Shouldn't it ?
Virtual nodes doesn't speed up either very much. Repair and bootstrap will be limited by the node doing repair or bootstrap, since it has to do the same amount of work whatever num_tokens is. It places a more even load across the rest of the cluster though, since it will repair with or bootstrap from all nodes in the cluster. So the overall time will in most cases be about the same.
The real speedup from vnodes comes when running removenode, when the streaming happens in parallel across all nodes.