el problema puede venir de que no tienes inicializada la variable de salida del procedimiento, por lo que si el valor es NULL, todo lo que concatenes automáticamente sera NULL
De esta forma a mi me funciona, solo he añadido la linea en rojo:
Código SQL
[-]CREATE PROCEDURE `usuarios`(OUT mails varchar(400))
BEGIN
DECLARE no_more_records INTEGER DEFAULT 0;
DECLARE v_email VARCHAR(100) DEFAULT "";
DECLARE cur_EventRanks CURSOR FOR
SELECT mail FROM usuario;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET no_more_records=1;
SET mails=''; -- inicializar la variable de salida
SET no_more_records = 0;
OPEN cur_EventRanks;
cur_Loop:
LOOP
FETCH cur_EventRanks INTO v_email;
IF no_more_records = 1
THEN
LEAVE cur_Loop;
END IF;
SET mails = CONCAT(v_email, ";", mails);
END LOOP cur_Loop;
CLOSE cur_EventRanks;
END