Is this mechanism even necessary today?
yes ofcourse.This ensure the compile time safety and keeps all behavior in one place.
When it is a code smell?
if enum is too large and Overloading Enums with business logic
How often is Enum used in this way?
This is still used.This is useful when finite constants are there,cleaner than switch statements
you can refer this
https://prgrmmng.com/enum-constant-specific-class-bodies-advanced-scenarios