I don't think FIND looks into nested blocks, but yes, there is a way to do it - parsiing. See the chapter on it in the REBOL/Core user's guide
here...Your kind of problem is perfectly suited for PARSE (the REBOL word designed for the job). However, what you're wanting to do is compounded by the need to look through nested blocks. Recursion is the normal way to do this. It's possible to do recursion with PARSE, (there's a section on it in the above mentioned chapter I think), but you may find it simplier to use a standard method using a function, at least until you're comfortable with using PARSE. (And you may find you don't need to use PARSE once you know how to do recursion.)
So, here's an example of using recursion to look through nested blocks. hopefully it'll point you in the right direction...
rebol []
blk: [a [b] c [d e [f g] h] i]
recurse-example: func [blk [block!] indent [string!]][
foreach value blk [
either block? value [
recurse-example value join indent " "
][
print join indent value
]
]
]
probe blk
recurse-example blk " "
Run that at the REBOL Console to see what it does, then work out how the function does it and you should then understand resursion. Do post again if you need more help. (And appologies if I'm teaching a grandmother to suck eggs here and you already know for paring works:)