Here's a variation on the theme that serves me well.
#!/bin/sh
#
# pkg_nuke - delete unneeded packages
#
# Usage:
# pkg_info > wanted
# vi wanted # keep only the lines you want
# pkg_nuke wanted
#
# All packages will be deleted, except the
# wanted packages and their dependencies.
#
[ $# -ne 1 ] && exit 1
field1 () { awk '{print $1}'; }
wanted=`mktemp -t`
field1 < "$1" | sort > $wanted
a=0
while true; do
b=`pkg_info | wc -l`
[ $a -eq $b ] && break
a=$b
incidental=`pkg_info | field1 | sort | comm -2 -3 - $wanted`
for x in $incidental; do pkg_delete $x; done
done
rm $wanted