This is explained some in the trap(1P) man page and more in the Advanced Bash Scripting Guide, which explains that the -- is a Bash built-in, used to denote the "end of options" for a command. Since scripts using sh are designed to be portable between other systems with it, bash behaves as if it were executed with --posix, which changes some shell behavior to match the POSIX specification.
When a signal is "trapped", (e.g., EXIT), it binds the first argument after the command to the signal, eval-ing it when the signal is issued, and ignoring its normal behavior (except for EXIT). So when trap 'echo something' EXIT is ranrun, then exit, the shell will eval 'echo something' prior to exiting. This would also work with a different signal, such as KILLTERM, which could be bound to, for example, a graceful exit function in a script. When trap -- EXIT is ranrun, the -- is interpreted as an "end of arguments", indicating to traptrap that the signal is to be bound to null ('') (since there were no flags prior to or after --), indicating to the shell to ignore the signal (however, this doesn't work with EXIT, but works with other signals). Running trap -- 'echo something' EXIT, however, will still eval 'echo something' and exit upon exit. As per the specification of trap, the command - by itself indicates that the shell will reset any traps for the signals specified, which is why it works in both sh and Bash.