Yes you would need to cast, so again its a loose override, theres no real override mechanic applied.
Alternative to that, you could well have an interface to specify overriding the initialization.. you util class would work against IHardware (for example), but it could check: is IHardware also ISelfInitializing ? if so, it could call the self initializing method described by self initializing..
The concept behind it was that it seemed you wanted a convenience method, otherwise a standard entry point doesn't really add any real convenience other than you setting yourself a constant pattern of initialization..
The initialization helper you would design to be smart, and cover as many scenarios as sensible, but the other interface would allow you to specify specifically designed initialization scenarios..
This way, you always initialize IHardware via an extension method (or directly via the helper class).. and the right route is taken to if the initialization is automatic, or via the 'manual override'..