<!-- this is ok since "Bob" is listed above -->
<who name="Bob" />
<!-- this is invalid since "Martha" isn't in the list! -->
<who name="Martha" />

I can also live without the attribute "name" restricted to the list, it can be whatever it works, a child element of string type, or anything! The important piece here is: can I restrict something to a part of the same XML, and yet being compliant with the XSD?

You can use Schematron to implement such a check, that the values are found in a specified list of values in an external XML document.
In fact there is an entire framework created on this idea, using Schematron for implementation, called genericode, developed by Anthony Coates and used in OASIS UBL standard so you may look into that.

Then you may consider generating the XSD schemas. For example you can add an annotation in the schema when you want to have those enumerations, that point for instance to the document that contain the values and then you can have a simple XSLT that run on the schema transforms those annotations in the corresponding enumerations.