That is a solution to the problem I had not thought of, and it may be the only way to actually do this, at least using WP_Query. The problem will come in when you have more than 10 rows in a repeater.
The only error I see is that you have an extra underscore in you meta keys, they should be.
'key' => 'dates_'.$row.'_start_date',
Sometimes there is no elegant solution. My only concern for this would might be the length of time it takes the query to run, that might give you a problem.