This class is the registry for the custom object types. It also stores the global objects. World objects are stored in the WorldConfig class.
Terrain Control supports multiple types of custom objects. By default, it supports BO2s, BO3s and a number of special "objects" like trees and UseWorld.
All those implement CustomObject. Plugin developers can register their own custom object types. If you have a number of CustomObjects that you want to register, just add your object to the global objects in the onStart event using registerGlobalObject. If you have your own file format, just use registerCustomObjectLoader(extension, loader).
Even trees are custom objects. If you want to add your own tree type, add your tree to the global objects and make sure that it's canSpawnAsObject returns false.
If your object implements StructuredCustomObject instead of CustomObject, it will be able to have other objects attached to it, forming a structure. As long as each individual object fits in a chunk, Terrain Control will make sure that the structure gets spawned correctly, chunk for chunk.