Ich wage, zu behaupten, dass es theoretisch ganz ohne geht
Also ganz ohne globale Konstanten/Variablen/Abhängigkeiten wirst Du eine Anwendung denn doch nicht hinbekommen. I/O z.B. wird kaum ohne gehen. Du kannst das zwar als Wrapper kapseln und per DI auflösen, aber irgendwer muss ja von außen die Abhängigkeit injizieren, und so hat der äußerste Anwendercode eben diese globale Abhängigkeit, spätestens der Wrapper selbst.
Die Frage, die sich da natürlich stellt ist die: Wenn nur eine einzige Klasse etwas globales verwendet (weil es im Framework nun einmal global ist), gilt das dann?