Not so much hassle.
Way 1:
1. put your patch to /etc/portage/patches/sys-apps/coreutils/my-ls.patch
2. emerge coreutils
Way 2:
1. ebuild /usr/portage/sys-apps/coreutils/coreutils-8.28-r1.ebuild prepare
2. edit sources in /var/tmp/portage/sys-apps/coreutils
3. ebuild /usr/portage/sys-apps/coreutils/coreutils-8.28-r1.ebuild merge
Really nice to work this way if you debug compiled software a lot.
1. uncomment the deb-src lines in /etc/apt/sources.list; if you do not have these, simply copy each deb line and have it begin with deb-src.
2. apt-get update
3. apt-get source <packagename>
4. cd <packagename>-<version>
5. (do modifications here)
6. dpkg-buildpackage -us -uc
7. install the .deb packages in the parent directory with dpkg -i
Do note, this does not properly embed your modifications in a patch or whatever, I haven't figured out how to do this and lose my mind at the same time.
I think you could avoid a lot of those bricking issues using btrfs snapshots.
On my desktop, I run into the same problem as you; I think my system partition is just a little small. On the laptops, I have not had any trouble with snapshots.
I do like the idea, though - if an update breaks anything, just roll back to the last working state. Windows did this 15 years ago, it was about time Linux distros started catching up.