Some languages try to address this by wrapping exceptions. For example, exception chaining in Python:
http://www.python.org/dev/peps/pep-0344/
The code that uses the subsystem will then be able to catch a meaningful exception (such as CannotCreateDatabaseTable), while for diagnostic purposes it is possible to check out or log the inner exception (such as NetworkTimeout). It's a compromise between "dumbing down" the exception (higher-level information is added, even) and making it impossible to anticipate the possible errors.