They are both pretty straightforward. Dominance and submissiveness are two separate variables that are tracked separately. If you are dominant, or take charge in a (usually) sexual situation, then you can gain points in dominance. If you are the submissive partner or give in to your partners desires and take a passive role, then you are being submissive and gain submissive points.
Some examples that come to mind:
Dominance
A guy is touching your chest and you push him away and leave. Your will is greater than his.
You seduce someone and coerce them into sex. Your will is greater than his.
As a succubus, a guy tries to rape you in the park at night. You turn the tables on him and rape him instead, over and over again.
Submissive
A guy is all over you and you give in to his desires and he has his way with you. He is being dominant over you.
A guy you barely know asks you for sexual favors and you agree. He is being dominant over you.
'The man lifts your skirt and starts to caress your bare buttocks with his strong hands.'
You do nothing.
'The man lowers your panties and slides his hand between your naked buttocks to caress your wet pussy.'
He is being dominant over you.
There are also other stats that come into play such as Exhibition and Inhibition.
Exhibition is public displays of sex or acting/looking like a bimbo or prostitute (in some cases). You can gain exhibition experience from prostitution and public sex.
Inhibition is your shyness or willingness to be naked around others. For example, many of the photo shoots in the city require a certain level of Inhibition in order to appear semi-nude, topless, or fully nude. You can gain Inhibition experience from flashing your tits or pussy in public, for example.
As far as you last question is concerned, I don't know.
I will admit that there are some cases in the code where the player isn't given proper experience to the four stats I mentioned. There have been so many "fingers in the pie" so to speak that the code isn't always consistent with these types of things. The code is always improving however.
I hope this helps!