One of the problems is how do you define why the instances are difference in the first place? Your getty example isn't actually correct, since getty can be instanced based on the tty keyword, for example:
start on tty-device-added KERNEL=tty and runlevel 
stop on tty-device-removed KERNEL$KERNEL and runlevel [!23]
(in the 0.6 model)
In the 0.10 model, this would be just:
while tty-device KERNEL=tty and runlevel 
the instantiation is automatic.
But this doesn't help when you aren't binding to specific ttys, for example if you use getty with openvt:
exec openvt getty
And you want two gettys, but you don't care which consoles they end up on. We should support that somehow.