Unfortunately the game does not sync the definitions between the server and the client. If you modify the definitions.db on a multiplayer server, it works properly for everything that's solely handled by the server (e.g. things like npc health, biome related things, spawn definitions etc), but if a particular definition is used clientside, the client won't see the serverside modifications (e.g. things like asset path of an item, animation or move speed of an npc etc).
When it comes to the crafting recipes, it's a bit tricky, as mentioned by james1bow : basically it's handled by the server (so if the client sends a craft-packet to the server, the server checks if the client has all ingredients in his inventory - based on the serverside definitions of course). However, the crafting UI is shown clientside, so it uses the clientside definitions. Before sending a craft-packet to the server, the client also first checks if the player has all ingredients (based on the clientside definitions), to prevent the player from sending useless requests to the server.
So if you modify the crafting recipes on your server, it won't really work, because the client wouldn't even send the craft-packet to the server if you don't have the required ingredients (based on the clientside definitions). If the ingredients are in your inventory (so the client sends the craft packet), the server will perform the ingredient-check too (but based on his serverside definitions) and remove the ingredients from the client inventory.
However, it's our intention to change that, so once a client joins a server, the serverside definitions will be synced with the client
This hasn't been added yet because there wasn't much demand for it in the past, but we're trying to get this ready with one of the next updates.
Until then, you can only change settings which are only used serverside, e.g. everything that's related to world generation (biomes, spawns etc), damage dealt by items or npcs, food/consumption values (health/hunger restore) etc.