S tím, že je to statická metoda, to nijak nesouvisí. Nemělo by smysl, aby Class.forName() vracelo konkrétní typ, třeba Class<String>, protože místo toho už můžete rovnou v kódu použít String.class. A i kdybyste jako typový parametr použil nějakého předka, při tom volání není jak to ověřit, stejně by ve volání té funkce muselo být skryté explicitní přetypování - je lepší, když to udělá rovnou programátor, aspoň tím dá najevo, že ví, co dělá.
Surové typy jsou jen pro zpětnou kompatibilitu, v novém kódu by se vůbec neměly používat. Class<?> a Class je každé něco jiného, to druhé je surový typ a u něj neprobíhá žádná kontrola typových parametrů, v prvním případě se dál typové parametry kontrolují.
Ve vašem případě nemůže newInstance() vracet PlugInFilter, protože ji voláte na typu Class<?> nebo-li Class<? extends Object>, který jste získal voláním Class.forName(). Kdybyste tu metodu volal na typu Class<? extends PlugInFilter>, bude vám vracet PlugInFilter.