Ответ: Чаще всего(!) нужны для уменьшения бойлерплейт кода при создании классов, которые будут использоваться для хранения данных. Внимание: именно «чаще всего», а не «только для» =)
Автоматическая генерация методов equals(), hashCode(), toString() и copy() избавляет от необходимости вручную писать бойлерплейт код, что позволяет сосредоточиться на логике приложения.
Также, их используют когда нужно сделать копирование объекта. Используя переопределенный copy().
Плюс их использование полезно в тех случаях, когда нам нужны коллекции, которые требуют сравнения, например, HashMap или Set.
Data class-ы надо использовать только тогда когда это необходимо!