O que você está tentando fazer não é possível devido ao seu esquema. A notação de ponto pode ser multinível, mas se houver mais de um nível que seja uma matriz, ela não poderá mais ser endereçada usando o operador posicional '$'.
Por exemplo. você precisaria fazer:
db.my_collection.update(
{'websites.blog_posts.url': 'http://www.example.com/01.html' },
{'$set': {'websites.$.blog_posts.$.impressions': 549}},
true );
Mas ter dois operadores de posição na atualização não é possível, pois o MongoDB só pode determinar a posição de um elemento no primeiro array.
Sua única opção é redesenhar seu esquema para ter uma coleção dedicada de sites de usuários (o que é melhor por outros motivos também neste caso).