It sounds like you're on the right path - seeing this as a final option given that this behavior is severely impacting the business. I think it will work.
I second that Resource Governor would be a preferable option - that would give them a pool of resource limits, and would throttle them if they hit it, instead of actively giving them application error messages and forcing a response.
Is there potential to use this to request increased server resources/hardware to cope with the increased load, or if those queries are going parallel and using high CPU, can you reduce MAXDOP to reduce their impact on other queries? This would affect queries from other users/applications too.
Consider whether the end-user having 20 windows open is most efficient for delivering business value. If it is, then you're adding a constraint to that process, and that needs to be best for the whole business. This method will also force a response when new sessions fail. Cap this as high as you can tolerate.
Keep communicating to those users that you have reviewed the alternatives, and that this genuinely is the most appropriate decision for the business.
It sounds like you have already, but be sure you understand the application behavior and are only cutting the high-resource use sessions. For example, SQL Server Management Studio has one open session for Intellisense, one for the Object Explorer, and one for each open query tab.
This is one I highly suggest testing first - I've locked everyone out of a development instance before through a bad server trigger!