3 of 7 added 55 characters in body

Jelly, 50 41 bytes

®“œṣ⁾“F”jЀFvµÐL
“()“{}“[]“<>”©ẋ"FŒ!QÇÐḟY

Plain and inefficient.

Try it online! (times out at TIO for [1,1,1,1] - yes, inefficient.)

How?

updating...

œṣ⁾()Fœṣ⁾{}Fœṣ⁾[]Fœṣ⁾<>FµÐL - Link 1: recursive reduction: string
                        µÐL - loop until no change:
  ⁾()   ⁾{}   ⁾[]   ⁾<>     -   literals "()", "{}", "[]", and "<>"
œṣ    œṣ    œṣ    œṣ        -   split at occurrences of
     F     F     F     F    -   flatten

“(){}[]<>”s2¤ẋ"FŒ!QÇÐḟ - Main link: list: [n(), n{}, n[], n<>]
            ¤          - nilad followed by links as a nilad:
“(){}[]<>”             -   literal "(){}[]<>"
          s2           -   split into twos
              "        - zip with:
             ẋ         -   repeat list
               F       - flatten
                Œ!     - all permutations (yeah, it's inefficient!)
                  Q    - de-duplicate
                    Ðḟ - filter discard if:
                   Ç   -   call last link (1) as a monad (non-empty is truthy, while empty is falsey)