What does scene.objects.unlink really do?
It removes the object from that scene.

The reason the method is not called remove is that the object its self is not removed. Objects can exist in multiple scenes and groups. So scenes link to objects but don't store them (this is why you have bpy.data.objects).

The object-base is freed, mostly object-base is not exposed to the api, but in some cases accessing is important.