Tomcat uses both hostname + path to determine where the request should go: if you have multiple virtual hosts, then /foo might map to two different virtual hosts depending upon the Host header (or URL, which
generally agree with each other).
The only complication TLS adds is that a certificate often only has one single hostname in it, and the server can only bind to "all interfaces" on a single port (e.g. 443) a single time. Thus, administrators often have to pick a certificate that will work for everyone.
As you have mentioned, SNI offers a way around this: the client can notify the server which host they are attempting to contact and the server can reply with the preferred certificate for that host. I don't believe Tomcat has direct support for SNI, though Java 7+ should be able to handle it if the server software (Tomcat in this case) is capable. I haven't looked into how it can be done, but at this point, Tomcat should probably include this feature, at least for JSSE.
There are other ways to get around this, including using wildcard TLS certificates, binding to different network interfaces to get s unique interface/port combination for each certificate, etc.
Tomcat /can/ be used, here, but it currently takes some creativity.