Дело в том, что они позволяют сохранять ссылки на объекты, не предотвращая их сборку мусора.
Две основные причины, по которым вы хотели бы этого, - то, где вы делаете свое собственное периодическое управление ресурсами, например закрытие файлов, но, поскольку время между такими проходами может быть долгим, сборщик мусора может сделать это за вас; или где вы создаете объект, и может быть относительно дорого отследить, где он находится в программе, но вы все равно хотите иметь дело с реально существующими экземплярами.
Второй случай, вероятно, более распространен - он подходит, когда вы держите, например, список объектов для уведомления, и вы не хотите, чтобы система уведомлений предотвращала сбор мусора.