I would say both. The list and its children (associated list and property list) are quite versatile. Struct in a typed language gave you benefits too, but the issue is loss of flexibility even if you have protocols like Swift or implicit interface like Go. With lisp you think in terms of data instead of bothering with names and interfaces. Most lisp functions are projections or builders.
Something similar, dx wise, could be achieved with using immutable maps, lists, and sets. But most languages relies on being able to mutate blob of memories.