Puedes hacer todo esto con una sola update llame al modelo en lugar de buscarlo primero con findOne :
User.update(
{'addresses._id': address_id},
{$set: {'addresses.$.street': 'Blah'}},
function(err, count) { ... });
Esto usa el posicional $ operador
en el $set para apuntar solo a las addresses elemento que coincidió en la consulta.