I’ve seen all of these used to mean ‘pretty’, although ‘hermosa’ seems to mean beautiful and ‘guapa’ seems to mean handsome. Are there any subtle differences them?
For instance, in English being beautiful is a much higher compliment than being pretty. Do these words have different levels of praise to them as well? Can guapa be used for females as well as males? How can I learn which one to choose for a given situation?
I will try to make a comprehensive answer on the subject.
First of all, Guapa(o), Hermosa(o), Linda(o), Bonita(o), Bella(o) are all synonyms to some extent, so one can be used in the place of the other most of the time. Although some are more appropriate than others depending on context, read further.
Second, let’s define all of these terms according to the RAE, this alone may help you see the subtle differences between them.
bonito1.
(Del b. lat. boniton).
m. Pez teleósteo comestible, parecido al atún, pero más pequeño.
Ver artículo enmendado
bonito2, ta.
(Del dim. de bueno).
adj. grande (‖ que supera a lo común). Tiene un bonito mayorazgo
adj. Lindo, agraciado de cierta proporción y belleza.
bello, lla.
(Del lat. bellus). 1. adj. Que tiene belleza.
adj. Bueno, excelente.
□ V. arte bella bellas letras bello sexo
lindo, da.
(Del lat. legitĭmus, completo, perfecto).
adj. Hermoso, bello, grato a la vista.
adj. Perfecto, primoroso y exquisito.
m. coloq. Hombre afeminado, que presume de hermoso y cuida demasiado de su compostura y aseo.
lindo don Diego.
m. coloq. lindo (‖ hombre que presume de hermoso).
de lo ~.
loc. adv. Lindamente, con gran primor.
loc. adv. Mucho o con exceso.
□ V. linda pesca linda pieza
hermoso, sa.
(Del lat. formōsus).
adj. Dotado de hermosura.
adj. Grandioso, excelente y perfecto en su línea.
adj. Despejado, apacible y sereno. ¡Hermoso día!
adj. coloq. Dicho de un niño: Robusto, saludable.
guapo, pa.
(Del lat. vappa, vino estropeado, hombre vil, vagabundo).
adj. coloq. Bien parecido.
adj. coloq. Animoso, bizarro y resuelto, que desprecia los peligros y los acomete. U. t. c. s.
adj. coloq. Ostentoso, galán y lucido en el modo de vestir y presentarse.
adj. coloq. U. en vocativo, vacío de significado, como expresión de cariño, a veces con retintín o con tono de irritación. Cállate un poquito, guapo
m. Hombre pendenciero y perdonavidas.
m. En estilo picaresco, galán que festeja a una mujer.
m. pl. vulg. Prendas que se ponen en días de fiestas y ocasiones muy señaladas.
~ y apoyado.
loc. adj. coloq. Ven. Dicho de una persona: Que tiene respaldo de los gobernantes.
Now that we defined those terms we can see that bonito is also a kind of fish, that lindo is also a man with female mannerisms or that guapo can be clothing or a vain guy who lies.
You ask if guapa can be used for both males and females, well guapa is inherently applied to females, but if you want to apply it to males you have to say guapo. Guapa(o) is, most of the time, used for young people and especially for men (i.e., the masculine form guapo, at least in some regions). Guapa can be used for females and it isn’t considered weird or uncommon, but bonita for females is preferred over guapa, just as guapo is preferred over bonito for males. Guapa(o) can be used for someone that you wouldn’t really treat formally even if you don’t know the person. If you are young and she/he is young, too, you would seldom treat this person as usted, therefore there’s no need to use a word more formal than guapo. Guapo is almost never used to describe a thing, except if you are teasing. (Please note that in many regions of Spain, guapo is used to describe something that is cool, nice or awesome. Nonetheless, in Latin America, it is mostly used for people.)
On the other hand, if the person you are describing or addressing is someone that you would treat formally such as an old person, or a ‘respected’ person, it might be better to use bello or bonito / lindo. Keep in mind that bello is more often used in literary works and grandiloquent expressions, or by someone who wants to show off his vocabulary skills.
Hermoso is sometimes used to describe someone but more often used to describe something in nature, a passage or something that is very majestic, such as these images here. Even so, you will find that some apply the word to other things as well. The RAE definition for hermoso also includes one that is specifically used for children (see hermoso, meaning #4 above). Translated into English, it basically means that hermoso can be used to describe a healthy-looking child, and, as a native speaker, I can attest that this word is widely used in this context.
For a more general word lindo or bonito is what you are looking for. Both words can be used in any context, to describe a person, young or old, formal or informal, to describe things or anything you can think of.
Note: I am a native speaker and this is based mostly on experience with a grain of opinion. From region to region, you will find differences in usage and meaning. I will admit that I don’t know all those in existence, especially those found in Central America, the Philippines and Equatorial Guinea, but my knowledge of what these words mean and how they are used do apply to other regions to some degree.