I really do not understand your point here, but you do not create any EE components with new operator but retrieve reference to them in some way. The way you do this
the best waydepends on your business logic needs. Injection is really the easiest way but others are also not rocket science... If you want to keep some state in any components you can use contexts. You bind components to some context and retrieve them without
explicit createlike Component.getInstance(<yourComponent>, true). Conversation context is very useful in most cases...
Is there a way to enforce not using the new operator, is that something that everyone writing code needs to know not to do?