1) В свежих мускулах лимит во вложенных работает вроде как.
2) Если мускул не свежий, можно делать выборку во временную таблицу, потом аппелировать к ней.
3) Честно говоря решение со вложенным запросом кажется утяжеленным в любом случае.
3) Задачу Вы ставите как «3 уникальных фамилии», однако в примере решения Сидоров=3, Петров=1, Иванов=2… а пример с вложенным селектом (n,n+3) подразумевает вообще не понятно что:) Вам надо «не больше 3»?
4)
select * from testid where surname in (
SELECT surname FROM `testid` WHERE 1
group by surname having count(subject)<=3
)
Во вложенном — выбираете все фамилии которые встречаются меньше 4 раз, и потом выбираете все данные с этими фамилиями.