The commit you're referring to is a merge commit. It's what happens when git can't do a fast-forward merge.
As to why you lose both commits when you do git reset HEAD~, that's explained pretty well here. Basically ref~ is shorthand for ref~1 and means the commit's first parent. That merge commit's first parent is (probably) on the branch it was merged to (not the branch it was merged from) so you no longer see both commits.
Consider this tree
First parent | A -- B ---- D <--- You're here \ / C ^ Second parent
Going back one commit to the first parent would put you here
First parent <--- You're here | A -- B ---- D \ / C ^ Second parent
Since you are now at commit B, neither commit D nor C are visible. The commits aren't canceled, they are just not visible from the commit you are on. You generally only see parent (past) commits of the commit you're on, not child (future) commits.