Hey, I know what you mean!
The closest thing that I’ve been able to come up with is to create base properties for panel widgets then use those properties to add children, set screen positions, handle events, etc using base functions that get called in the child widget on construct (or whatever event kicks off your widget).
For example, my inventory layout holds a reference to the grid panel that contains the inventory slots and holds a base function that goes and adds the desired number of slots to the grid panel.
On my child widgets construct event I set the grid property to my inventory grid panel, then I call the function to create the grid.
I still have to manually set the layout in each child widget, but that is what the child widgets are for anyway so it still works out!
preston42382 mentioned something similar in their comment, but I wanted to share my setup too.