If for every $\epsilon$-NFA their exists an equivalent NFA what is the purpose of ever using an $\epsilon$-NFA? I am having trouble understanding what the practical purpose of using one would be.
Purely convenience. It's like, in a programming language, why have
for loops, if every
for loop could alternatively be written as a
while loop? Convenience. It's sometimes convenient to be able to use epsilon-transitions, when defining NFAs. For instance, when converting a regexp to a NFA, the construction is arguably a bit simpler (easier to understand) if you allow yourself to use epsilon-transitions.
Given a regular expression constructing an equivalent NFA with epsilon is easier than constructing equivalent DFA. Also given two DFAs you can easily construct NFAs with epsilon moves accept concatenation, intersection, union, and Kleene closure of the languages. Look here for example.