+f users are recognized by their hostmasks just like other users. There's no logging in unless you have some sort of auth script running.
In your script, you can pass the 'f' flag to bind and it will only respond to +f users. Or, in your procs, you can test if they have +f with matchattr (see tcl-commands.doc).
So your topic changing thing would be sort of like this:
bind pub f !topic my_set_topic
proc my_set_topic {nick uhost hand chan text} {
putserv "TOPIC $chan :$text (set by $nick)"
return 1
# the 1 makes eggdrop log this command in the logfile
}