The presence of mutable pairs causes numerous problems:
It complicates the specification of higher-procedures that operate on lists.
It inhibits certain compiler optimizations such as deforestation.
It complicates reasoning about programs that use lists.
It complicates the implementation of procedures that accept variable numbers of arguments.
However, removing mutable pairs from the language entirely would have caused significant compatibility problems for existing code. As a compromise, the set-car! and set-cdr! procedures were moved to a separate library. This facilitates statically determining if a program ever mutates pairs, encourages writing programs that do not mutate pairs, and may help deprecating or removing mutable pairs in the future.