ЛА
Вообщем для себя сделал вот такой фикс - вручную проверяем переменную окружения CONFIG и если она задана, пишем ее содержимое в отдельный файл, и переучиваем viper читать этот файл.
Так мы можем поставлять сложный конфиг через энв, также сохранена совместимость с всей функциональностью viper, которая ранее использовалась.
https://play.golang.org/p/ec_uczgNuQ4