Abstraction is the fundamental way to deal with complexity in programming. It allows us to escape from the implementation details and focus on the essential part. A good example of abstraction is the list sort function. It doesn't matter how it works. It just has to do what we need it to do.
Another example is map
and filter
— higher-order functions allowing you to process collections without knowing their internal structure. Moreover, the collection doesn't have to be flat: these functions can be written for structures that are as complex as you like, for example, trees.
Abstractions with functions help you focus on the processing, not the data traversal process. On the other hand, the data themselves often have a complex structure. Presenting a user with a non-trivial system may require you to describe dozens and hundreds of different parameters and data associated with them.