In a class diagram, is there a way of specifying that a class is an internal class of another class ?
Or is it considered as a pure implementation choice ?
Consider using a nesting relationship (a line with a '+' in a circle at the parent end).
Since UML isn't supposed to be directly implementation specific, I'd use a naming convention, such as:
OuterClass vs OuterClass::InnerClass
I would imagine if you're hoping to reverse-engineer or code-generate to/from UML that different tools would us different techniques (if they support it at all).
A quick test of some reverse engineering using Enterprise Architect (EA v7) confirms that they use the above InnerClass::OuterClass syntax when processing some C# with a public inner class.
For this kind of thing you have separate Diagrams showing the internal structure or processing of a class.
usually, those extra diagrams are activity diagrams to show processing. Sometimes one per method. You might also have an internal sequence diagram showing the API interactions.
No reason you can't have an additional class diagram to show internal structure of a class.