Во-первых, вы можете поместить NSvalue в CFMutableDictionary как есть, поэтому ответ «используйте NSValue». Но я предполагаю, что остальная часть вашего вопроса «без использования каких-либо объектов Какао». В этом случае просто создайте не сохраняющий CFMutableDictionary, и вы можете поместить в него любой указатель. См. «Определение пользовательских обратных вызовов коллекции» для примера кода. Я часто ими пользуюсь.
Помните, что они все еще должны быть указателями, поэтому вам придется размещать свои структуры в куче, а не в стеке. А это значит, что управление памятью теперь ваша проблема. Конечно, вы можете создать собственный набор обратных вызовов, которые делают все, что вы хотите, поэтому, если вы используете boost или что-то еще с его собственной системой подсчета ссылок, вы все равно можете реализовать это с помощью CFMutableDictionary.
И, конечно, вы можете заменить структуру небольшим объектом данных. Обычно это намного проще. Но разные проблемы требуют разных решений.