If you're extending, it means the sub-class builds upon the super-class, hence sub cannot exist without sup.
With the in mind, the correct pattern becomes obvious:
Have sub require sup.
Do that and fix whatever else breaks. The dependency system is fine.
Now, from the code sample you wrote, this bit looks awkward:
// This is the main logic file
goog.require("super");
var foo = new super();
var bar = foo.doStuff();
You have sub extend sup, no problem here.
Then use sup to create an instance of sub (which, remember, extends sup).
A class that returns an instance of another class is pretty much a factory.
Your utility class, which the factory is making, extends the factory itself.
Perhaps it would be a good idea to create a third entity in your design, and call it factory.
Then you include the factory, and it will return you an instance of sup, or sub, or whatever you like.
--
A ciência consiste em perturbar um sistema e analisar sua reação. Eu, sou uma perturbação.
André Tannús | Ideas at Epungo
"Somewhere, something incredible is waiting to be known."
Carl Sagan