Tal ves
esto te ayude a resolver tu dilema, por ejemplo JQuery utiliza para implementar lo que necesitas
sizzle. Aunque siempre puedes crear tus propias funciones que traten de simular el comportamiento de los selectores y luego utilizar la función querySelectorAll que plantea Andrés.