Well not exactly hacked per se, but I found you can manually edit one of the MSKLC source files to remap CAPSLOCK, and I assume any key for that matter. And please forgive me if this is old news for I searched and could not find this info anywhere.
Mandatory stupid warning: I assume no responsibility if this FUBARs your computer. I have tested it on mine (Win7 32 and 64 bit) and it seems to work fine but use at your own risk.
Instructions:
(1) Download and install Microsoft keyboard Layout Creator 1.4 (MSKLC) from Microsofts website.
(2) Copy a backup of the file C:\Program Files\Microsoft Keyboard Layout Creator 1.4\inc\kbd.h
In 64bit windows its: C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4\inc\kbd.h
Keep this backup in a safe place so you can easily restore the file if need be.
(3) Open (EDIT) kbd.h in notepad. Scroll down till you see the keyboard type 4 definitions.
Should look like this:
#if (KBD_TYPE <= 6)
/***************************************************************************\
* T** - Values for ausVK[] (Virtual Scan Code to Virtual Key conversion)
*
* These values are for Scancode Set 3 and the USA.
* Other languages substitute their own values where required (files kbd**.h)
*
* Six sets of keyboards are supported, according to KBD_TYPE:
*
* KBD_TYPE Keyboard (examples)
* ======== =======================================================
* 1 AT&T '301' & '302'; Olivetti 83-key; PC-XT 84-key; etc.
* 2 Olivetti M24 102-key
* 3 HP Vectra (DIN); Olivetti 86-key; etc.
* 4 * Enhanced 101/102-key; Olivetti A; etc.
* 5 Nokia (Ericsson) type 5 (1050, etc.)
* 6 Nokia (Ericsson) type 6 (9140)
*
* * If KBD_TYPE is not defined, the default is type 4.
*
* KB3270 comments refers to KB 3270 keyboards in native emulation mode (DIP
* switches all OFF), and the Scancode Map used to convert its scancodes to
* standard scancode set 1.
* KB3270 <= 57 - this entry is reached by mapping from scancode 0x57
* to an arbitrary scancode: the VK is what counts
* KB3270 => HOME - this scancode is mapped to the scancode for VK_HOME
* KB3270 - no mapping involved, a scancode for KB3270 only
*
* _EQ() : all keyboard types have the same virtual key for this scancode
* _NE() : different virtual keys for this scancode, depending on kbd type
*
* +------+ +--------+--------+--------+--------+--------+--------+
* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
\****+-------+-+--------+--------+--------+--------+--------+--------+******/
#define T00 _EQ( _none_ )
#define T01 _EQ( ESCAPE )
#define T02 _EQ( '1' )
#define T03 _EQ( '2' )
#define T04 _EQ( '3' )
#define T05 _EQ( '4' )
#define T06 _EQ( '5' )
#define T07 _EQ( '6' )
#define T08 _EQ( '7' )
#define T09 _EQ( '8' )
#define T0A _EQ( '9' )
#define T0B _EQ( '0' )
#define T0C _EQ( OEM_MINUS )
#define T0D _NE(OEM_PLUS,OEM_4, OEM_PLUS,OEM_PLUS,OEM_PLUS,OEM_PLUS)
#define T0E _EQ( BACK )
#define T0F _EQ( TAB )
#define T10 _EQ( 'Q' )
#define T11 _EQ( 'W' )
#define T12 _EQ( 'E' )
#define T13 _EQ( 'R' )
#define T14 _EQ( 'T' )
#define T15 _EQ( 'Y' )
#define T16 _EQ( 'U' )
#define T17 _EQ( 'I' )
#define T18 _EQ( 'O' )
#define T19 _EQ( 'P' )
#define T1A _NE(OEM_4, OEM_6, OEM_4, OEM_4, OEM_4, OEM_4 )
#define T1B _NE(OEM_6, OEM_1, OEM_6, OEM_6, OEM_6, OEM_6 )
#define T1C _EQ( RETURN )
#define T1D _EQ( LCONTROL )
#define T1E _EQ( 'A' )
#define T1F _EQ( 'S' )
#define T20 _EQ( 'D' )
#define T21 _EQ( 'F' )
#define T22 _EQ( 'G' )
#define T23 _EQ( 'H' )
#define T24 _EQ( 'J' )
#define T25 _EQ( 'K' )
#define T26 _EQ( 'L' )
#define T27 _NE(OEM_1, OEM_PLUS,OEM_1, OEM_1, OEM_1, OEM_1 )
#define T28 _NE(OEM_7, OEM_3, OEM_7, OEM_7, OEM_3, OEM_3 )
#define T29 _NE(OEM_3, OEM_7, OEM_3, OEM_3, OEM_7, OEM_7 )
#define T2A _EQ( LSHIFT )
#define T2B _EQ( OEM_5 )
#define T2C _EQ( 'Z' )
#define T2D _EQ( 'X' )
#define T2E _EQ( 'C' )
#define T2F _EQ( 'V' )
#define T30 _EQ( 'B' )
#define T31 _EQ( 'N' )
#define T32 _EQ( 'M' )
#define T33 _EQ( OEM_COMMA )
#define T34 _EQ( OEM_PERIOD )
#define T35 _EQ( OEM_2 )
#define T36 _EQ( RSHIFT )
#define T37 _EQ( MULTIPLY )
#define T38 _EQ( LMENU )
#define T39 _EQ( ' ' )
#define T3A _EQ( CAPITAL )
#define T3B _EQ( F1 )
#define T3C _EQ( F2 )
#define T3D _EQ( F3 )
#define T3E _EQ( F4 )
#define T3F _EQ( F5 )
Now replace where it says "CAPTITAL" with "BACK".
Save the file. And now 'copy and replace' it back into the %MSKLC%\inc directory so MSKLC will now use the new definition when it runs.
(4) Run MSKLC as you normally would. Create or import a layout and then "build DLL and Setup Package".
Viola! The resulting *.DLL files will have the remapped CAPSLOCK. No need to mess with registry, and you don't need to reboot to get the original QWERTY + CAPSLOCK behavior back. Just change to a normal layout with the language bar.
You can also put CAPSLOCK on the BACKSPACE key and swap LSHIFT/RSHIFT with letter keys. That is all I have tested so far and it all seems to work fine.