Вы можете расширить класс UILabel через категорию, чтобы добавить некоторые функциональные возможности. Проблема в том, что UIButton создает свою собственную UILabel, и вы не можете переопределить это (безопасно). Поэтому, если вы решите использовать UIButton, единственным вариантом для изменения поведения метки по сравнению со стандартным UILabel является фактическое изменение класса UILabel (через категории).
Кроме того, вы можете написать свой собственный UIControl и имитировать функциональность UIButton. Тогда вы можете делать все, что захотите.
EDIT - Если этот класс FontLabel расширяется от UILabel, может быть возможно расширить UIButton и использовать метод swizzling, чтобы заставить его создавать FontLabel в качестве titleLabel. Это довольно экстремально, и я думаю, что вам гораздо лучше написать собственный UIControl, имитирующий поведение кнопок.