To answer myself: I am probably not correct.
I though I understood uses constraints well, but trying to formalize the problem makes me feel daft.
A bundle can consume objects transitively through any chain of wires and feed them somewhere else transitively as well. It doesn't have to see the entire type hierarchy of the objects to do this. It is sufficient to load only the types present in the bundle code.
So when we take all wires of a bundle and then expand them transitively we must not hit two versions of any package.
I.e. any two chains of wires that start form the bundle can not terminate at two versions of the same package.
I hope this covers it.