It's not a functionnality, it's the way we are doing the work inside widget. The content and the bounding box are seperated.
I know it can be not really user friendly sometime, but at least, we are not forcing you to a single usage of widget.
As for the Label, by default, the text is rendered without any size constrain. Giving a constrain with text_size property can be more slower, since if the widget change size, the text will be rerendered. You can also achieve padding by reducing text_size constrain.
If you want a Label with that by default, better is to create a widget like:
class ConstrainedLabel(Label):
pass
And in the kv:
<ConstrainedLabel>:
text_size: (self.width - 20, None) # padding of 10 pixels each side
Hope that's help
Mathieu