Yes, they both add some functionality to the existing system at run-time and try to be less reactive (in a good meaning) to dynamic changes, but with some differences.
Visitor is primarily to respect OCP (and sometimes to SRP), to make the system more flexible. You can add whatever Visitor you can as your program evolves without changing the existing system. However, you need to design the system in such a way beforehand. You can't add a new Visitor class (or pattern) to already running system and expect it to work without re-compiling, re-testing or whatsoever.
On the other hand, you can use Decorator to enrich the existing system functionality by wrapping the abstract base class (that you already have) in a Decorator and provide the enriched feature of yours as a separate object so you can you can create as you need. Moreover, semantically, Decorator rather refers to appearance of sth.
Which one to prefer? IMO, answering this might be more helpful. For me, I don't like the Decorator's way of use the base class. It both uses inheritance and aggregation. If you need to change this (wrapee) class, you end up with re-compiling entire hierarchy/module. But it's handy since and you can change the behavior after design time. On the other hand, in Visitor pattern, I don't like the idea of knowing each concrete types in the Visitor implementation. When you add a new base class type, you also need to go and change the Visitor class to add it. But it's useful when you need to inject a code to the existing system without altering the structure or you need to separate concerns in a class (Single-User Resp).
Finally, what makes Visitor better than regular inheritance? Depends. Using inheritance you will be more dependent to interface signature. Using Visitor makes your Visitor class dependent to concrete classes. Not to mention you add more behaviours using visitor without changing existing module signature instead of implementing new interfaces in the existing class.