I can't escape the feeling that emacs got this right. Nobody wants their config to be lisp, but it fits the bill for what you needed. Especially combined with the custom sections. So nice.

Your config language being turing complete doesn't work if you need to accept/validate config files from untrusted parties

edn seems like the right solution, then.

https://github.com/edn-format/edn