Q:

¿Cómo obtener el mismo resultado de esta función para calcular el hash con sha1 y codificarla en base 64?

En PHP uso:
$hash = base64_encode(sha1($password.$key, true).$key);

Y en Node.js yo utilizo estas líneas para hacer un nuevo hash pero...  no tengo los mismos resultados que con php 
var hash = crypto.createHash('sha1').update(password + key).digest('base64');

A:

Puntualmente el problema que pude ver es que en PHP al usar sha1 y establecer $raw_output = true (segundo parámetro), el resumen sha1 será devuelto en formato binario.
Es por esto que en NodeJS al generar el hash SHA1, al resultado también es en necesario convertirlo a binary (o Latin1 que es lo mismo).
Intenta hacerlo así

crypto
// Generamos el SHA1, lo convertimos a 'binary'
var sha1 = crypto.createHash('sha1').update(password + key).digest('latin1') + key;
// Encodeamos a Base64
var hash = new Buffer(sha1, 'latin1').toString('base64');

crypto-js
// Generamos el SHA1, lo convertimos a 'binary'
var sha1 = crypto.SHA1(password + key).toString(crypto.enc.Latin1) + key;
// Creamos un WordArray para poder hacer el encode de la nueva cadena
var wordArray = crypto.enc.Latin1.parse(sha1);
// Encodeamos a Base64
var hash = crypto.enc.Base64.stringify(wordArray);

