A ConfigValueContainer is basically just what it's name says: a container. You can think about it as a buffer between the config-file (which is hard to parse) and a config-value (which will be assigned to lots of class instances).
Every config-value has it's own ConfigValueContainer. The container is stored in a map inside the Identifier of the corresponding class. This way it's possible to iterate through all ConfigValueContainers? of a class.
A ConfigValueContainer for a specific config-value is either created as soon as a class declares the config-value or when a new config-file with a new value gets loaded.
Creating a new config-value
A new config-value can be defined by using the SetConfigValue?(varname, defvalue) macro where varname is a member variable of a class and defvalue the default value that will be used if no other value is configured. The macro-call must take place within the setConfigValues() function of this class.
Calling setConfigValues() of an object causes all ConfigValueContainers? of it's class to assign the stored values to the variables of the object. The values are initially read from the config-file but can be changed during the game by using a ConsoleCommand in the Shell? ("config classname varname value"). It's possible to change variables only temporary without saving the new value in the config-file ("tconfig classname varname value").
See ConfigValueIncludes for more information about how to create and modify different types of config-values.