When you create a TextureRect, it has some inherent size which is based on the underlying size of the actual texture. But imagine you want the image displayed in-game to be larger or smaller... if you place the TextureRect inside a container, your only option seems to be to create a new texture (or revert to work-arounds using shaders, as you suggested, though I haven't verified if that works). This is potentially wasteful and/or time consuming. Obviously you could run into artifacts when scaling your textures up or down, but it seems that should be left up to the game dev to decide on thresholds that are acceptable. And FWIW my goal isn't to have "absolute control" over the size of the image or anything, I still want to benefit from the auto-management provided by containers, I simply want to be able to say "make that image a bit bigger/smaller overall" without having to actually resize the raw texture.
Does that make sense?