> It leads to horrendous abstraction leakage (I need to let every caller know I use FooBarWidget in the core of my application??),
If your code catches any exceptions that might be thrown by its use of FooBarWidget, then you wouldn't need to specify it as an exception that your code might throw, right? If it doesn't, then your code exposes to callers that it uses FooBarWidget every time FooBarWidget throws an exception.