Having written scrapers in the past, I can tell you that changes are usually pretty easy to deal with. And if you write your scraper nicely, many small changes won't even matter.
Since the client runs on the user's machine, performance isn't really an issue, either. (Trying to do it for all users on a server is a different story.)
APIs are indeed "all the rage" because they're easier and don't change as much. But when given no other option... You do what you have to.
I think the obvious solution is to have the client first check for updated scraping rules from a server operated by the client's creator. The client could check for these scraping rule updates every time the client starts up or on some interval (or maybe after certain errors even) and only pull down the whole thing when the cache is invalidated. Then, as you suggest, the client could do the actual scraping which would make it harder for twitter to block.
Not as straightforward as an API to be sure, but not impossible by a long shot.
Since the client runs on the user's machine, performance isn't really an issue, either. (Trying to do it for all users on a server is a different story.)
APIs are indeed "all the rage" because they're easier and don't change as much. But when given no other option... You do what you have to.