It's a bit of an odd setup. If you look at the code, there's a thing called a spec, which tells the injector how to create an object. There's also a service cache, which contains actual instances.

When you register an object, both a spec and a service cache entry are created. When you unregister an object, only the service cache is removed (leaving the spec in place). However, the has service method checks the spec list rather than the service instance cache. It's saying "I know how to get or create an instance of that service" rather than "I have an existing instance of that service".