One of the problems that Age developers encounter is the lack of easy GUI tools to handle game logic, and a lack of full implementations of everything needed for game logic.
Originally, PyPRP had no responder modifier support or animations. This led many developers to do things like write Python scripts to animate doors opening. Pretty much everyone agreed that this was a terrible idea, but there weren't other options at the time.
As the tools became more advanced, newcomers took advantage of things like animation support in Blender, and some of the older Ages were updated. Some people prefer sticking with their existing solution rather than learning the new features and new interface.
The end result is that we have a handful of Ages that use Python hacks for things that "should" be done differently, but due to how things were implemented it wasn't possible.
Python in Uru should never be an Age developer's first thought when looking to implement logic. There are a handful of messages to deal with things like playing sounds, playing animations, fading effects in and out, etc. This is where we really need to put together good documentation and a user-friendly GUI (PlasmaMax has a pretty good one, but I don't think it lists all of the possible messages).
If your puzzle/problem needs more advanced logic, the second step is to look for global Python files that accomplish what you need. Making things visible/invisible based on states in the database, saving states to the database, and playing animations/sounds/fancy effects when a state changes are all possible using the global scripts.
Then, if you need something even more advanced, is when writing your own Python should come into play.
Python should always aim to sit as a layer between a LogicModifier and a Responder.
Some of the global scripts are designed in such a way that using them in fan Ages is almost impossible. Linking Books are the best example of this. Every Linking Book needs to be added to a Python script before the book can be displayed. Clearly this will cause problems if every single Age developer is trying to add stuff to a shared global file!
This is where solutions like Dustin's are most useful.
Regarding database states, SDL is a complicated system, and it's confusing for Age developers. I definitely agree with those sentiments, but it's also a brilliant design that is essential to just about every aspect of Uru. Personally I'd rather see effort put into making tutorials and user-friendly tools rather than providing SDL alternatives.