It's hard to tell whether people put arbitrary data in the witness because of the op_return limit or because of economics:
Using an op_return to put data in a transaction is cheaper for payloads smaller than 143 bytes (ignoring the current 83-byte limit), while over 143 bytes the witness is cheaper.1
The op_return limit certainly seems to be effective, but it is also true that for larger amounts of data (anything over 143 bytes) it's probably going to go into the witness anyway.
Either way, it does feel like a contradiction: if filters don't work then why do you need to get rid of them? However, it may be more nuanced: filter isn't stopping the behavior, it's just moving it.
Footnotes