There are other qualifiers to filter on metadata such as size, date and ownership.

# files owned by the user running zsh, over 1MB, last modified more than 7 days ago
echo *(ULm+1m+7)

Glob qualifiers can also control the order of matches, and restrict the number of matches.

echo *(Om[1,10]) # The 10 oldest files

You can set up arbitrary filters by calling a function, with the + qualifier (you can even put the code inline with the e qualifier, if you don't mind the tricky quoting).

Note that unfortunately all of this only works on globs. If you want to build a list of file names this way, you need to filter when you're globbing. If you want to filter a list that you've already built, there's a completely different syntax, parameter expansion flags, which can only perform simple text filtering ("${(@)ARRAY:#PATTERN}").