What is the practical purpose of an epsilon NFA?
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.