Примитивные типы данных, как правило, это булево значения, числа и строки. Иногда туда входят специальные значения языка (null, undefined).
Структурные данные, как следует из названия, имеют некоторую структуру. Например, списки и объекты. Структурные данные могут содержать в себе примитивы и другие структуры.
Абстракция же - это не тип данных сама по себе, а способ сделать код выразительным. Мы даём структурам данных имена и этим абстрагируемся от деталей реализации. Например, пользователь - это абстрактный тип. Нам не важно представлен он строкой, массивом или объектом, для нас это абстракция. Абстракция с помощью данных.
Можно сделать абстракцию с помощью функций. Например, функция сортировки коллекции. Она будет скрывать алгоритм обхода коллекции, предоставляя нам только абстрактный интерфейс
collection.sortBy('name')