For me it seems that 'not being able to grow' shouldn't be problem at all. It's even more realistic this way, a tree that don't have enough space can't grow big and strong...
The main problem was about spawning, I guess it was totally random. If it was possible to make trees appear only around fully grown ones it would solve most of the problems (all trees around villages are usually cut down anyway). And if probability of a tree growing, when there are many objects around was lower, it would be even better, but I guess it's not that easy to do

Maybe it could be done a little other way round than I suggested first... What about something like this: trees tries to appear on random spots, but first it has to check two factors:
- how many objects are in close range
- how fare are the closest fully grown trees
Based on this, it calculates the probability of sprouting, and chooses kind of one of the closest trees.