Se os seus pares [ , ] forem sempre correspondidos e você não cruzar [...] s com <...> , e seu grep suportar a opção -P (como o GNU grep quando construído com suporte a PCRE), você pode fazer:
grep -P '>(?!((?:[^]]|\[(?1)\])*)$)'
Ou seja, procure um > que não seja seguido apenas pelos pares [...] correspondentes. Ele usa o mecanismo de correspondência recursiva de (?1) do PCREs.