無理とか言わないでw
「数行」 ってのは正規表現以外の処理入ってもよくて、例えば、

my $string = 'aa {bb} cc { dd {ee} } ff { gg { hh { ii { jj } kk } ll } mm } nn';

1 while ($string =~ s/(\{(?>[^{}]*))\{((?>[^\}]*))\}/$1\x11$2\x12/); # 中のカッコを一旦escape

while ($string =~ /(\{[^{}]*\})/g) {
    local $_ = $1;
    tr/\x11\x12/{}/; # 中のカッコをunescape
    print $_, "\n";
}

これより上手い方法思いついたら教えてほしいのですr