is there anything bad with using objects in objects?
Nope, just make sure you keep the coupling as low as possible, and the coherency as high as possible (so that changes will have a minimal effect on your existing code). Personaly, unless you have some methods to add to your 2Dpoint Type I there isn't much point in using it. I'd also skip anything remotely global, everything should be local in the object..
I disagree. There are quite a few cases (Singleton pattern for instance) where static references are absolutely nessecary.