Why do we need epsilon-transitions in Thompson's construction?
What you're looking at there is what's known as Thompson's construction. The idea is that any node in the regular expression parse tree corresponds to an NFA with a single entry and exit point. To see why the epsilon transitions are useful, try applying the construction to, say, $(a \cup b^*)c$.

Thompson's construction is particularly easy to understand and implement but it is also, as you rightly say, a bit wasteful. It is possible to construct Thompson's automaton with the epsilon transitions removed using Glushkov's method. You may also be interested in Xing's construction.