I only use it in cases where an underlying framework does not expose or provide the functionality I need (and subclassing is not an option). I wouldn't necessarily say it means these frameworks are not well-designed though.
Yes, at least in unit tests.
Sometimes you need to call stuff which you cannot work around so it is required to patch calls.
It's also useful for developing developer tools (for the same effect as interposing).