It complicates the specification of higher-order 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.