I want to be able to release free downloadable content for my game, like new car models, textures etc. I also want some of the textures in the game to be open to the player, for example decals on the cars.
Are asset bundles a good way to achieve this?
If you want to add new content in your game which only consist in new models, textures, etc… and no code changes, the assetbundle system is the way to go.
If you want people to modify the content of your game by changing textures, you can load them in your game at your first launch and then write them as .png using Texture2D.EncodeToPNG (Unity Documentation)
then, always load the textures of your game from the path you writed them (in your installation folder if you are doing a pc game for example).
At this point, you can also create 2 folders, one with your original textures (those ones will always been overriden by any assetbundle update) and a second where players can drop their own textures which will replace yours in the game. With this kind of system, a game update will never broke the player works