Du kan bara använda $ positionsoperator för ennivåmatriser. I ditt fall har du en kapslad array (heros är en array, och inom den har varje hjälte en spells array).
Om du känner till indexen för arrayerna kan du använda explicita index när du gör en uppdatering, som:
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});