Im no expert on channel Ops stuff, but this would seem a good solution.

It simply sets off a timer that if the channel limit is not channel nicks + 3 then it sets it to that. The timer does not go off for 5 seconds so, if there is a join flood, only 3 nicks get in, the timer updates to 3 more than that but wont trigger for 5 seconds.
* Well still have a problem on a netsplit rejoin, if the channel limit is to low, unless netsplits are aspecially dealt with to avoid this. (i dont know)

Code:
on @!*:JOIN:#channel:{ control.channel $chan }
on @!*:PART:#channel:{ control.channel $chan }
on @!*:KICK:#channel:{ control.channel $chan }
on @!*:QUIT:{ if ($nick ison #channel) { control.channel $v2 } }
;
alias -l control.channel { $+(.timer.set.channel.limit.on.,$network,.,$1) 1 5 if (  $!calc( $!nick( $1 ,0) + 3) != $!chan( $1 ).limit ) mode $chan +l $!v1 }