Instead it has this crazy interface that looks like hashes of hashes but isn't (the order of the keys doesn't matter)...
The order of the keys doesn't matter in most hashes. Regexp::Common uses a tied hash to avoid compiling all of the possible regexps at compile time.
... and there's something strange about what it returns that I couldn't be bothered to figure out myself.
A compiled regular expression? They've been around for most of a decade, if not longer.
When last I looked if you tried to peek at it with the "x" command in the debugger, the debugger would crash.
Having read some of the debugger's code, I'm not surprised. Did you file a bug?