I think PD is like many programming languages, it takes a little while to find a way that it works for you.
in many ways PD is quite simple (if you don’t start adding lots of external), as its got quite a limited set of objects, so once you get the flow concept, things start to fall in place. (for me at least)
(I think if you start using lots of 3rd party externals that makes the learning curve steeper in some ways, too many options, and inconsistencies)
initially for me (as a C++ developer) I found PD’s whole flow/visual side really clumsy,
but in fairness, Id tried Max a while back, and had the same experience (despite it being better implemented and having ‘debug support’) , but then because I preserved, I started to appreciate its immediacy.
thats said, I prefer using it as a ‘glue’ , so doing anything more complex in C++, and just expose it as an PD external (which are surprisingly easy to create)
learning by doing its the only way 
having converted most of C&Gs Organelle patches to Oracs modules, Id say the majority are well written (or at least easy to understand) , and as you say introduce you along the way to some slightly more advanced topics, so its a good exercise… (not sure about 3rd party organelle patches, as not looked at them)
btw: a good proportion of the C&G Organelle patches are within Orac, and Im releasing this soon on the Rasperry PI very soon.
finally… I found with PD, the whole user interface (in broad sense, not GUI) was really time-consuming/frustrating, and thats why I built mec-kontrol (which orac is based on) - you might find this interesting if you need things like patch parameters/midi mapping/preset recall.
(you can find a few videos showing Orac/Mec on my youtube channel )