Покрыл написанную часть тестами (напоминаю, тесты
тут), и уже выявил много ошибок и несовпадений.
Например, для меня явилось откровением, что querySelector избавляет от пересечений в результатах. Если у нас несколько селекторов, перечисленных через запятую, возвращают один и тот же элемент, то в результатах он появится только первый раз.
Поскольку эмуляция этого поведения будет довольно требовательной к ресурсам, похоже, придется убить это умение в querySelector.