This is not a requirement in Keras -- it's only the default setting. If you have a loss with multiple inputs/targets, here are your options, in order of preference: (a thread)
keras.io/api/losses/#th…
And if you need access to labels, use the "endpoint layer" pattern: keras.io/examples/keras…
A few examples:
Metric learning: keras.io/examples/visio…
Vanilla GAN: keras.io/examples/gener…
WGAN-GP: keras.io/examples/gener…
CycleGAN: keras.io/examples/gener…
Remember that Keras defaults are only meant to cover the most common workflows -- for anything else, you have a range of increasingly advanced options.
We call it "progressive disclosure of complexity"