mi pare strano sommare e poi sottrarre lo stesso valore di anno.

Potresti anche fare cosi':

Codice PHP:
SELECT DATE_FORMAT(data_nascita,'%d-%m-%Y') AS nato
DATEDIFF(
CURDATE(), concat(year(now()), date_format(data_nascita'-%m-%d')) 
) as 
diff 
FROM sql_agenda 
WHERE  
DATEDIFF
(CURDATE(), concat(year(now()), date_format(data_nascita'-%m-%d')) 
BETWEEN -30 AND 30  
ORDER BY diff DESC 
nel where non puoi usare l'alias dichiarato nella select perche' il where viene risolto prima dei campi, subito dopo il nome tabella.
In pratica viene fatta una scelta dei record che rispettano la richiesta where, viene composta una tabella temp con solo i record interessati e su questi viene imposta la selezione e l'order by