т.е. выделяешь память enif_alloc_resource, делаешь из нее ресурс enif_make_resource, это уже erlang term, который с подсчетом ссылок на этот ресурс, и определяешь функцию уничтожения ресурса(освобождения памяти), которую erlang дернет когда все ссылки на твой term-ресур, канут в лета. И все, передавай его куда хочешь, но естественно нужен какой то примитив синхронизации, или статический или можно его засунуть в какую-нибудь структуру, которая создается при загрузке NIF и передается в любой NIF вызов