Indeed, Otto, lists can contain block level elements. I did overlook that for some reason.

However, I think you’ll also agree that lists do imply some kind of relationship between its items, and with widgets there is none.

Re: function_exists: I think of it as a ‘goto-like’ solution because if you have the same function defined by a user after the initial function_exists call, it will call the original. In other words — the output of function_exists depends on the order of the code.

Regarding the rest — I agree that there is no single argument for either of the approaches and therefore both are in a way viable.