steps.step restituisce un array di stringhe in questo caso ["s1", "s2"] . La normale $lookup supporta tale confronto e fa $in dietro le quinte.
Nel tuo secondo esempio stai usando $expr quindi devi usare il linguaggio delle espressioni quindi devi usare $in operatore:
$expr: { $in: ['$_id', '$$stepId'] }