So I have this idea of moving all these conflicting situations in a separate .cpp file ordered by their dependencies.
That would be a file that you need to update for code in other parts, and a dependency in your code that you need to track and keep up to date manually (a source of bugs basically).
Don't do that.
The order of static initializations can be forced, by using static functions instead:
/* static */
int ExampleClass::EXAMPLEVAR()
{
static const int value = OtherExample::OTHEREXAMPLEVAR();
return value;
}
This guarantees that the values will be returned/initialized respecting initialization order dependencies.