More specifically the newtype pattern is mostly so that you can implement foreign traits on foreign types.
You can't normally do this since there's a high risk of duplicate implementations, so by enforcing only local types/foreign traits or foreign types/local traits (and of course local/local types and traits), this duplication doesn't occur - there's only ever one implementation of a trait per type, and the ownership of those implementations is very clear and we'll defined.
The newtype pattern simply makes a "local" type that wraps a foreign type, allowing you to implement the foreign trait on the new local type, and forwarding calls of the trait methods to the inner type - all while maintaining the single trait impl and ownership constraints rust imposes.
Further, given all of the compiler optimizations that happen, newtypes are effectively free.
For those who haven't seen it, this is what newtype looks like:
use some::ForeignType;
struct LocalType(ForeignType);
As the parent comment states, it has nothing to do with enums.