You meant reinitialized, not redeclared, right?
C compiler has to initialize all static variables at startup. Static variables without initializer are initialized to zero. All variables in .bss sections are reset to zero at startup. All variables in .data (variables with initializers) are initialized with data from ROM .idata section or something like that. I'm not sure about all sections, but you could move some variables to non default section and startup routine will be unable to initialize those variables.
In CW for MCUs V6.3 this seems to be working:
1) Create some custom memory section. Let us call it .noinit
Add to lcf file, somewhere between .bss {} block and .custom {} block something like this:
.noinit :
{
*(.noinit)
} >> userram
2) In your "C" file
2.1) make compiler see .noinit section:
#pragma define_section noinit ".noinit" far_absolute
2.2) move varible to .noinit section:
__declspec(noinit) int a;