"* Define FILTER in such a way that it can *create* new solution mappings, just like BGP. "

The difference between FILTER and BIND - by design - is that BIND creates bindings while FILTER only filters solutions.

As for your second requirement:
"* Instead of applying filters after matching, the generated solution
mappings of a FILTER would directly be joined with other parts of the
query."
let's turn to your second example

"Find all ?x locatedIn ?y, where ?y is the USA or a state of the USA."

seems to do the job. Similarly, a FILTERs only version is possible, however, within FILTERs you can't use UNION, but you can use || in combination with EXISTS here to express the desired filter conditions over patterns: