Allora sono riuscito a risolvere.
Basta settare esplicitamente l'encoding usato tramite la funzione mb_internal_encoding();


codice:
<!DOCTYPE html>
<html lang='it'>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <?php
        define("STR_ALPHABET","aäābcdeëfgijĵklmnoöōøprsŝtŧuůvwy");
mb_internal_encoding("UTF-8");

        echo STR_ALPHABET.'<br />';

        $strNuova = mb_substr(STR_ALPHABET,1,1); 
        echo $strNuova.'<br />';

        $strNuova = mb_substr(STR_ALPHABET,1,1); 
        echo $strNuova.'<br />';

        $strVar = STR_ALPHABET;
        $strNuova = $strVar[1];
        echo $strNuova;
        ?>
    </body>
In questo caso ogni carattere viene valutato singolarmente in automatico prendendo uno o due byte. Ciò che non funziona (e questo è un limite dei multibyte a quanto ho letto sul web) è l'accesso diretto tramite array. Ma per fortuna è una cosa a cui si può tranquillamente ovviare.
Grazie a tutti