When dealing with these kinds of issues it might help to go back a step and find out if the users really need to view a data table that has 20 - 30 columns. I cannot imagine that anyone will need to look at that much data all at once, it would be difficult to process all the information because of the intensity of the information load.
One way of solving this could be to empower the users to select the columns they want to view within the table through a filter menu or the like. Once the user has selected their desired columns the data table is generated. It would be a nice way to find out how many columns the users would actually want to view at one time. So why not test it with simple paper prototype or some kind of survey?
Remember that the user should have more ownership of the interface than your client/boss.
In addition:
There is a bunch of really good advice on data tables found in this article.
Horizontal scrolling, as you mentioned, could be one option. However, I would be concerned about the discoverability of such a feature.