Может быть, я что-то здесь упускаю, но я действительно не вижу, что не так с (1). Я думаю, что даже если у вас было несколько проектов, которые использовали libkml, просто вставьте файл проекта для libkml в файл решения, укажите зависимости, и все готово. Это очень просто. Даже решение (2) очень просто. Если библиотеки когда-нибудь изменятся, вы перестраиваете - вам все равно придется это делать.
Я не вижу, как (3) или (4) необходимы или даже желательны. Для меня это звучит как большая работа для целей (организация дерева исходных текстов и ремонтопригодность), что я даже не уверен, что эти варианты действительно соответствуют. Фактически, вы сами сказали, что «маловероятно, что код libkml изменится по отношению к коду нашего приложения».
То, что я нашел за эти годы, - это просто все упростить. Если перестройка KML может занять много времени, возьмите библиотеки и просто статически связывайте их с библиотеками. Да, есть и другие зависимости, но вы настроите их один раз, и все будет готово, надеюсь, вы больше никогда не будете беспокоиться об этом. В противном случае, вставьте его в проект и двигайтесь дальше. Я думаю, что стоит спросить, стоит ли тратить много времени на эту проблему.