I came up with a fun crafting system, but it has the downside of requiring quite a lot of assets to be pre-built. I'm going to describe it and see if I can get the requirements down.
The first thing to realize is that, as a crafting game, there's not really any violence. This both limits and frees us, and it's our foundation. So we'll start at the bottom: the individual avatar that the player uses.
The big issue with noncombat games is that the statistical elements tend to suffer. Basically every RPG and MMO is built on the stat treadmill. Your character is a bundle of combat stats - eight gear slots, a bunch of skill slots, six stats... you incrementally upgrade them as you grind through the game.
This kind of stat treadmill is not inherently bad - it is a well-understood method of pacing gameplay. So it makes sense to preserve it. Unfortunately, taking out combat takes out the concept of weapons and armor, the concept of battle techniques, spells, regeneration, etc. We could reintroduce that complexity by forcefully adding combat-like elements into the game, but let's not. Let's keep things fairly simple.
However, keeping things simple while still using the statistical treadmill leaves no room for self-expression. You might offer the player ten thousand options, but if they are all simply "+1 to this stat", then there's no bite to it. There has to be both visual and statistical bite to all the choices the player makes, all the things the player crafts.
As an easy example, let's say that the clothes you wear matter. You equip various clothes and get various bonuses to various stats such as intelligence, endurance, charisma, etc. Whatever the gameplay, these are important bonuses.
Even assuming the clothes were complex enough to support interest, it has some serious disadvantages because it turns into "gear slots". You have a hat slot, a gloves slot, a shoes slot, and so on. It's in your best interest to keep them kitted out at maximum, so everyone runs around overly haberdashed and nobody ever changes clothes except when a clear upgrade is in the works. There are ways around this - clothes that degrade, for example - but it'd end up being annoying for gear the player crafted to degrade away, and it wouldn't really solve the problem.
The solution is that the player doesn't usually control exactly what the avatar is wearing. I mean, they can, if they go home and access their wardrobe. But in general, whenever the player logs in the avatar is wearing a random assortment of clothes from the active wardrobe.
The wardrobe is just a piece of furniture that can contain maybe thirteen pieces of clothing. As long as all the clothes you're wearing are from that wardrobe, you get all the bonuses from all the clothes in the wardrobe. Knowing you have access to that gear is the same as wearing it, because this is not gear that actually has important physical characteristics. As long as there's a hat of +3 intellect in your wardrobe, it's okay if you're not wearing it: you still get the bonus because you're the sort of person that bought or made such a hat and considers wearing it every day.
Of course, you may randomly be wearing it when you log in, and if it looks silly you may decide to take it off - but that will either require a trek back to the wardrobe or moving the hat to general inventory (and removing the bonus entirely).
Similarly, there may be some clothes that have modes - for example, a jacket might default to "unzipped", and that's the stat bonus you get when it's in your wardrobe, unworn. If you are wearing it, you can either leave it unzipped or zip it up, in which case the default stat bonuses are canceled and you get a different set of bonuses (such as cold weather resistance).
It's hard to proceed to the city-building part until you fully understand this concept: your stats include things you don't currently have equipped. Simply having something available to you changes how you look at and interact with the world. And you can have a dozen wardrobes, each with a different set of characteristics for facing different challenges.
Now, let's consider NPCs. NPCs are important in our game. One of the things you can do is kit out your NPCs with a wardrobe, the same way as you'd kit out yourself. This obviously gives the NPCs the bonuses from those clothes. It may also change their personality or job preferences somewhat. And, of course, a proper named NPC may have several wardrobes that they use at different times.
Now, let's consider a city. What makes a city unique is more than just the arrangement of the buildings: there's a city culture that makes your city distinct from others. There are a lot of ways to create and shape a city culture. One of those ways is by how the locals dress.
So you can create a shop in your city, a shop with a specific set of clothes for sale. A certain percentage of your population will shop there, and they will have a wardrobe that is the same as the shop's clothing assortment. Therefore, by putting a shop in your city you are defining a whole segment of your population - their stats, their preferred jobs, their personality. This happens to NPCs you meet in the street, sure, but it also happens when simply considering the statistics of the city population as a whole.
You can manually create shops. Design each article of clothing and painstakingly aim for exactly the kind of population you want. You might even make a small profit off of it.
Or you can create a branch of some other player's shop. You won't make the small profit, but chances are that the shop has very well-designed clothes in a perfect assortment for a given kind of job or culture. Other players have the incentive to make their shops branchable because they'll get that small income. Random cities can use player-created shops and come out feeling a bit more planned and up-to-date than if they stuck to stock shops.
I've been focused on clothes because that's the element with the clearest chain from individual player avatar to city scales. The same technique applies elsewhere, though: if something is available, it doesn't have to be concrete to give a bonus.
For example, in a small sci-fi village, a building might contain both living spaces and functional areas (such as power plants, 3D-print shops, comm systems, etc). You can manually put NPCs into the living spaces and they'll work the functional areas. They may even customize all those spaces with their personal style, if there's enough time to put those assets into the game.
But that's a village. A city is not a place where you can assign each NPC, or even see every NPC. In this case, you can put down "pure function" or "pure habitation" buildings. Instead of choosing who lives in them, NPCs automatically populate them. Not in any kind of concrete way - there are no specific NPCs that live in apartment 3-A. The apartment building simply supplies a fuzzy number of citizens. If you stood outside the building and watched people entering it, you'd eventually see a wider variety than can possibly live there, because every citizen shown to your watchful eye is randomly generated according to the rough price estimate the apartments have.
Similarly, fully functional buildings don't have specific workers. The NPCs manning the stations inside are just randomly chosen, and if you come back day after day you'll find another batch of randomly-generated NPCs, their only similarities being that they shop at whichever shop has the highest rating for their job requirements and is in the right income bracket.
Both pure function and pure habitation buildings are the same as a piece of clothing in a wardrobe: they exist, and therefore the city has slightly different stats. You don't need to know that 8 people from building A work at building B - the simple, archaic Sim City approach works fine. If you have a lot of high-paying jobs, you have one kind of city. If you have a lot of cheap places to live, you have another type of city.
This same method can be used in every situation. Cars? The one you're driving right now obviously has specific characteristics, but in terms of the population of the city, they drive a car from a specific dealership, and the city's stats reflect that dealership's car options.
It also works on the small scale. Your clothing wardrobe defines your stat bonuses, sure. But so do your friends and NPC associates. Even if they aren't actively hanging out with you precisely at this moment, the knowledge that they are available to you leaves you free to go out on a limb, knowing you can call on their support. So your "circle" gives you bonuses based on whoever is in it, regardless of whether they are actually teamed up with you at the moment.
This approach creates a very craft-friendly environment: there are a lot of spots to stick crafting. Unlike most games, if you craft an outfit your options aren't simply "wear it" or "sell it", but to carefully consider whether to add it to one of your wardrobes, or an NPC wardrobe, or a shop in one of your cities...
Unfortunately, it's an approach that requires an annoyingly huge amount of content. I'll have to think some more about how to do it with almost no content and still have it be compelling to play.