Как автоматизировать сборку зависимостей программы?
Смотрите в сторону любого менеджера зависимостей вроде Conan или vcpkg. У конана точно есть интеграция с CMake. Только учтите, что много чего вам всё равно придётся писать руками. Управление зависимостями -- это головная боль в C++, т.к. язык очень старый. Обычно у всех компаний есть свои велосипеды для этого.
С помощью связки CMake + Conan реально получить то, что вы хотите.
Следующим шагом будет создание установщика для  уже скомпилированной программы, который будет устанавливать программу на компьютер пользователя. Тут всё ещё хуже на самом деле :) Но это уже другой вопрос.
Как это решается в других проектах?
В других проектах (обычно называемых "дистрибутивы ОС") библиотеки и заголовочные файлы помещаются в пакеты и устанавливаются стандартной командой ОС из репозитория. Велика вероятность того, что часть ваших библиотек уже представлена готовыми пакетами.
Другие проекты (иногда называемых "построители дистрибутивов") могут по большей части состоять из рецептов сборки всяческих библиотек. См. например buildroot или yocto.