OK, that makes the question clear.
First of all I need to clarify that "passenger_min_instances 2" does not mean that 2 instances will be created. Instead it means that if the passenger_pool_idle_time is reached, Passenger will not shutdown the last 2 instances. So if you start your server with "passenger_min_instances 2" no apps will be started at all until users start to come (or if you specify a preload url).
Now for the passenger_max_instances_per_app. Try looking at it like this: it doesn't really matter what server block a certain request comes from, as long as the app code & configuration is the same, you can use the same app to handle the request. Passenger also does this, so passenger_max_instances_per_app 10 means that in total 10 copies of your app may be created (assuming your max pool size allows it) to handle the traffic for all 10 VirtualHosts. It doesn't matter if you have 10 or 50 VirtualHosts, and one app copy will handle requests from different VirtualHosts.
Keep in mind that if you change the (Passenger) configuration in server block the app might change. For example if one server block runs in development mode and the other in production mode Passenger cannot use 1 app to handle both so you will get 20 copies (10 of each) - again assuming the max pool size allows it.