1] Once you add a setting you're supporting it forever
2] Unintended consequences: settings impact other settings
3] Settings excuse you from making informed product decisions
4] Settings allow complexity/opinions to creep in
It has tons of settings in the form of properties read from several .properties files (with cascading: shipped, on site, per user, etc.).
When we replace an implementation with another, we provide a setting to fall back on the original implementation, in case a catastrophic bug happens in production... Of course, these settings and old implementation remain there for years!
When we change a behavior, we provide a setting to allow users disliking this change to go back to the previous one...
Etc., ad nauseam...
The worst part is that at least half of the settings are not even documented (on even in internal docs) and can be discovered only when reading the code (and of course, they are sprinkled all over the whole code base!).
Later, we introduced a more central location for these settings and they became auto-documented... :-)
In recent products, we try and avoid to add (too much) settings. :-D