Отвечу по Opencart.
закрытая регистрация пользователей (или регистрация с почтой на определённом домене)
Возможно ручное создание пользователей и модерация зарегистрированных пользователей.
ручное "пополнение баланса". Каждый пользователь будет видеть историю начислений своего баланса с комментарием "за что". Администратор будет видеть общую историю начислений,
Есть система бонусных баллов, история начислений и трат
покупка виртуальных товаров, коими являются способы реализации баллов (чтобы не указывать "адрес доставки" и не беспокоиться об "остатках на складе"
Можно не учитывать остатки на складе по любой из позиций и для магазина в целом
покупать товары со "свободной ценой" на случай покупки "перевода баллов коллеге"
Сделать товар с ценой 1 балл и пользователь сможет указать нужное количествао
В целом исходники открытые, так что можете допиливать любой нужный функционал.