At least our db doesn't support parameterized lists for use with IN operator. Not often I need this but when I do I'm glad our db layer has macros for SQL with automatic string escaping.
Done both, manually doing it looks messy, and higher chance of typos.
Sybase SQLAnywhere btw.
As for why more than 2000 entries in a IN list, well, some customers generate a fair bit of data, and our program allows for bulk updating via pasting from Excel or similarly tabulated data. Depending on the case, it's necessary to grab all the entries from the db and work on them as a batch, rather than one-by-one.