That is a LOT of questions, I wouldn't expect anyone to answer all of them fully in one go. I'll give my best on questions 1 and 2:
1) When a method with @Transactional is invoked on a bean (i.e. not directly in the same class), Spring checks for an existing transaction and does something. That something is set by your configuration (and may be configured differently for methods or beans), see Transaction Propagation. So you could be using an existing one, making a new one or not using a transaction at all.
2) I found non-eager fetching to be a problem in my projects. It certainly is possible, but IMHO it's difficult to maintain and adds extra space for a mistake. This problem has been discussed before (answer is again: possible, but requires extra work, you should weight the benefits vs effort for your specific situation): Open Session In View Pattern