hmm, why do you want to differentiate between a "normal" object and an
abstraction?
i always considered abstractions to be equal to internals and externals.
(they are not from an API point-of-view; but i think that this is a bug
rather than a feature)
Distinguishing between externals and abstractions would be great since it would give you an at-a-glance understanding of what has "more inside". Sure externals and abstractions are capable of congruent behavior, but one cannot open an external, edit it and save it under a new name all within Pd. I'd see this feature as more of a "toggle-switch" rather than something I'd turn on or off permanently, though.
Speaking of the "more inside" concept: I strongly support subpatch differentiation, since personally I use subpatches primarily for patch organization rather than as impromptu abstractions, but you are already convinced : ).
It might be a good time to look at doing a "grammar" style identification of objects to choose their style; this would get a lot closer to syntax highlighting. It would be cool to see all iemmatrix objects, or all list processing objects highlighted in a different style. And this would of course solve the subpatch styling, since one could just look for "^pd .*".
And not to push my luck, but is it possible for the theme changes to live-update rather than only applying to new windows? I only ask because it would open some fun patch-UI hacks.
Cheers
Luke