The query: SELECT ? IS NULL should work even when the parameter type is unknown, as there is no need to know the type in that query.
While your statement is correct the behavior that all parameters must have a type is not buggy. As I'm not in a position to comprehend just how much could go wrong by removing that restriction (and making it work only in cases where type doesn't matter, like IS NULL, is unappealing) I'll forgo much speculation but will say that given that the error is both immediate and obvious the likelihood of changing this is quite low.
The PostgreSQL project has intentionally made a number of changes in the past that tighten up things in the area of types (unknowns and casting) with full awareness that those changes may break existing applications. It was felt that, on the whole, the benefit to future coders outweighed the inconvenience of a subset of the existing code.