Let's not have unexpected, non-thread-safe functions somewhere deep down.
NML3ConfigData -- as a data structure -- is not thread-safe, nor aims it to be. However, our code(!) should be thread-safe. That means, it should be possible to call our code on separate data from multiple threads. Violating that is a code smell and a foot gun.
This basically means that code should not access global data (unless thread-local) or that the access to global-data needs to be synchronized.