It is better to have a brandable name. A brand name should:
- Be unique. It should differentiate you from other similar sites. If somebody types it in a search engine, it should only have a meaning of "you".
- Be memorable. It shouldn't be too long or complex. It shouldn't be too similar to your competitors.
- Be easy to spell and pronounce. It shouldn't have alternate spellings or pronunciations.
- Have positive connotations. When somebody first hears the name it shouldn't bring to mind something bad. It should bring to mind something positive.
- Shouldn't limit you. Saying what you do or where you are located in your brand is common, but it prevents you from expanding to other services or areas.
From an SEO perspective, Google doesn't give much weight to the words in the domain name anymore. It used to be that having a site like bluewidgets.tld that sold blue widgets would get search engine rankings. That isn't the case today. A great brand like Amazon could put up pages for their blue widgets and be able to rank for them easily.
I wouldn't use either of your strategies:
- xmastown is a poor brand name because it limits you to Christmas related products and services. You could try to do other things with it but it would be an uphill battle with consumers that don't expect it.
- app-maker is a poor brand name because it isn't memorable and would be very similar to every other company that makes apps. It also limits you to only making apps.
I much prefer choosing a brand name on a made up word, or a mutation or appropriation of a positive word.