1/ on peut trés bien utiliser des scriptlets dans des taglibs, il suffit que le concepteur de la taglib l'ait autorisé.
2/ on ne peut effectivement pas utiliser de scriplet dans la taglib fmt pour la propriété value. Il faut utiliser EL (Expression Language), ie mettre la propriété dans la session, la requete ou le pageScope, puis appeler la variable comme suit:
<fmt:setLocale value="${pageScope.locale}"/>