Cloneable makes sense for some mutable data.
It doesn't make sense for
- immutable data
- where you might need a shallow or a deep copy.
- objects which represent resources such as threads, sockets, GUI components
- singleton and enumerated types
- mutable state where data should only be copied to avoid creating new objects.
Some coding styles suggest keeping new mutable data object to a minimum. Cloneable doesn't suit all situations and if you made all objects Cloneable you wouldn't be able to turn it off cleanly.
Note: There are many projects which avoid using Cloneable anywhere.