Back when I did LFS I dealt with this by giving each package an /opt prefix, symlinking their respective bin/, sbin/, lib/, man/ and so on dirs under a common place, and adding those places to the relevant system integrations (PATH, /etc/ld.so.conf etc.)
I put together a bash script that could manage the sumlinks and pack/unpack tarballs, and also wrote metadata file and a configure/make “recipe” to each package dir. It worked surprisingly well.
A handful of packages turned out to be hardcoding system paths so they couldn’t be prefixed into /opt (without patching) but most things could.