Uma maneira de conseguir isso é contar quantos serviços X ou Y distintos um usuário possui e, em seguida, retornar apenas aqueles que têm dois (ou seja, ambos):
SELECT n.name
FROM names n
JOIN services s ON n.user_id = s.user_id
WHERE s.name IN ('X', 'Y'Y)
GROUP BY names.name
HAVING COUNT(DISTINCT s.name) = 2