You can still add new tags to the DB from XML/SQL (existing tables or adding new ones entirely) and manipulate them from the DLL. The syntax is a bit obtuse, but I've used it for a couple of things in my mod. I added two new columns to the Promotions table, TurnDamage and BlocksHealing. (These are penalty promotions for specific units.) TurnDamage causes the unit to take damage each turn, BlocksHealing prevents the unit from healing itself (like barbarians).
I added the new columns via SQL and then just queried them as a part of the CacheResults function in the PromotionEntry class. You need a new field in PromotionEntry to store each value so it can be checked while the game is running. (This may break saves when you add it, I'm not 100% sure, it depends on the workings of the bitfields in CvUnit that are used to flag which promotions a unit has.)
This commit shows how I did the changes for the above promotions on the DLL side. For an example of how to query the DB from scratch for a specific value, check out my change in CvMap.cpp from
this commit. (Given you can execute SQL from within the DLL, you could make your table alterations/additions in there instead of in separate files if you didn't want the community DLL to have to include separate XML/SQL documents, just be careful about where the DB is access and make sure any changes are done before data is being queried from that table.)
If your difficulties were with the way religion is handled in the DLL then I may be slightly off topic. I haven't looked at how religion is handled there yet.