It would need some hacking. The ?col() functions are just for coloration. The hasauthority() function needs to be replaced with a function to check if someone should be able to siteban. You'd also need to provide a means of running @restart after modifying the list.
@create Site Banninator=5
&META_AUTHOR Site Banninator=Sponge/#4
&META_PURPOSE Site Banninator=Enable people other than #1 to add/remove sitebans
&META_UPDATED_BY Site Banninator=Sponge/#4
&META_NEEDS_FLAGS Site Banninator=inherit
&META_NEEDS_OBJS Site Banninator=#10 #3 #1774
&DATA_DB Site Banninator=#1774
&CMND_SITEBANS_LIST Site Banninator=$+sitebans/list:@switch [hasauthority(%#,SITEBAN)]=0*,@pemit %#=You do not have the proper authority to manage sitebans.,1,@pemit
%#=u(UFUN_LIST_SITEBANS)
&UFUN_FMT_RECORD Site Banninator=[setq(I,extract(%0,1,1,|))][setq(U,extract(%0,2,1,|))][setq(T,extract(%0,3,1,|))][setq(C,extract(%0,4,50,|,|))][ljust(IP: %qI, 24)][ljust(By:
%qU,25)][ljust(On: [mid(convsecs(%qT),0,11)][mid(convsecs(%qT),20,4)],24)]%rWhy: %qC
&UFUN_LIST_SITEBANS Site Banninator=[header(Sitebans)]%r[iter(lattr(v(DATA_DB)/DATA_BAN_*),u(UFUN_FMT_RECORD,get(v(DATA_DB)/##)),\ ,%r)]%r[footer()]
&CMND_SITEBANS_REMOVE Site Banninator=$+sitebans/remove *:@switch [hasauthority(%#,SITEBAN)][hasattr(v(DATA_DB),DATA_BAN_[u(UFUN_IP_TO_LABEL,%0)])]
&UFUN_IP_TO_LABEL Site Banninator=edit(before(%0,/),.,_)
&UFUN_VALIDATE_IP_CHARS Site Banninator=not(strip(%0,0123456789./))
&UFUN_FOLD_OCTET Site Banninator=add(shl(%0,8),%1)
&UFUN_VALIDATE_IP_RANGE Site Banninator=[setq(I,u(UFUN_IP_TO_INT,before(%0,/)))]and(gte(%qI,u(UFUN_IP_TO_INT,1.0.0.0)),lt(%qI,u(UFUN_IP_TO_INT,224.0.0.0)))
&UFUN_IP_TO_INT Site Banninator=fold(UFUN_FOLD_OCTET,edit(%0,.,%b))
&UFUN_VALIDATE_IP_OCTETS Site Banninator=not(edit(iter(%0,gt(##,255),.),%b,))
&UFUN_IP_VALIDATE Site Banninator=not(strmatch(iter(lattr(me/UFUN_VALIDATE_*),u(##,%0)),*0*))
&UFUN_LIST_BANIPS Site Banninator=iter(lattr(v(DATA_DB)/DATA_BAN_*),before(get(v(DATA_DB)/##),|))
&CMND_SITEBANS_DELETE Site Banninator=$+sitebans/delete *:@switch [hasauthority(%#,SITEBAN)][u(UFUN_IP_BANNED,%0)]=0*,@pemit %#=scol(You do not have the proper authority to manage
sitebans.),10*,@pemit %#=scol(No such IP ban found. Try +sitebans/list.),11,{&DATA_BAN_[u(UFUN_IP_TO_LABEL,%0)] [v(DATA_DB)]=;@pemit %#=pcol(Ban for %0 cleared. You'll have to
@restart for the changes to take effect.)}
&UFUN_IP_BANNED Site Banninator=hasattr(v(DATA_DB),DATA_BAN_[u(UFUN_IP_TO_LABEL,%0)])
&CMND_SITEBANS_ADD Site Banninator=$+sitebans/add *=*:@switch [hasauthority(%#,SITEBAN)][u(UFUN_IP_VALIDATE,%0)]=0*,@pemit %#=scol(You do not have the proper authority to manage
sitebans.),10*,@pemit %#=scol('%0' does not appear to be an acceptable IP to ban.),11,{&DATA_BAN_[u(UFUN_IP_TO_LABEL,%0)]
[v(DATA_DB)]=[if(strmatch(%0,*/*),%0,%0/32)]|%N/%#|[secs()]|%1;@pemit %#=pcol(Added '%0' to sitebans list. Remember to @restart for changes to take effect.)}
&CMND_SITEBANS_ADDPLAYER Site Banninator=$+sitebans/player *=*:@switch [hasauthority(%#,SITEBAN)][t(setr(P,pmatch(%0)))]=0*,@pemit %#=scol(You do not have the proper authority to
manage sitebans.),10*,@pemit %#=scol(Couldn't find player '%0'.),11,{@fo %#[setq(I,get(%qP/LASTIP))]=+sitebans/add %qI=%1}
@set Site Banninator=INHERIT
@set Site Banninator=SAFE
and
@Startup Wizard=@dolist u(#1773/UFUN_LIST_BANIPS)=@admin forbid_site=##
On NPM/CoH, #1773 is the Site Banninator and #1774 is an arbitrary THING to hold the siteban data.
Crazy spongecode aside, maybe ZONES could help here? I've never played with them.