An abstract data type has separate specifications and implementations. Anyone who uses abstracted objects does not need to know how the object's procedures are implemented, only what the procedures take as input and what they return as output.
Abstractions allow a program to be modularized into smaller parts.
Modularization becomes more and more important as program size grows. Consider a large group of people working on the same project. It is unlikely that they will communicate regularly, and even if they did, too much communication could slow the development of the program. Instead, they should be able to work on their own individual pieces without worrying about how the other people's parts are implemented. If each person knows they can use procedures defined in the specification, they do not have to know how the details of those procedures are implemented.