Разбивать селектор на простые выборки и в цикле спускаться на уровень/неск. уровней ниже каждый раз.
У меня это реализовано так:
var matches = selector.split( " " ),
result = Q(matches[0]);
for (var i = 1; i < matches.length; i++) {
result = Q(matches[i], result);
}
Разумеется, ф-ция поиска должна принимать вторым аргументом контекст поиска.