How to implement arbitrary editable content areas
Take a look at the Panels and Panelizer modules; they'll provide the basic building blocks you need for the kind of layout and editing experience you want.

They'll let you create arbitrary layouts (Panels comes with a few...creating new ones is easy) and embed panes of content including just custom HTML (called a custom content pane) at arbitrary URLs or, using Panelizer, by customizing individual nodes on a per-node basis.

Use the Fieldable Panels Pane (FPP) module, or the Bean module, to let you define fieldable components that can be placed into a layout using Panels or Panelizer.  So you could create an "image" FPP that has a field for a user to attach an image.  You would then control the actual rules for how that image is output, and the markup that surrounds that image, by configuring the view modes for that FPP.  Rinse and repeat for all the different sorts of elements you want users to be able to create.