you're right, \W does not match end or start
This should do it...
on $@*:TEXT:m/
(?<!\w)penis
(?!\w)/Si:#yourchannel: .kick # $nick Abuse detected
For multiple words: replace penis with (?:word1|word2|word3)
If you also want to have the word itself use (word1|word2|word3) and you have the offending word in $regml(1)