Assuming you're using a HD44780 based LCD...
Firstly, as you've observed, if you make changes to the CGRAM while your custom characters are being displayed, they update. This is because the HD44780 constantly refreshes the screen. You are never going to be able to display a 10 character "graphic".
if (( asc < 0 ) || ( asc > 7 )) // if asc is greater than 0 OR less than 7
return;
I'm not familiar with the code you're referring to but I'm guessing asc is short for the ASCII code for the character.
The controller has 64 continuous bytes of CGRAM for custom characters. To write to it you must tell the controller where to move the address pointer too. (The address pointer points to the memory location that will be written too next time you write to the display).
To tell the controller you're going to write to CGRAM you send it B01AAAAA. (B01000000==0x40). The high bit6 tells the controller to go to CGRAM, the AAAAA then tells it where abouts in the CGRAM to go to. Remember that the CGRAM is 64 bytes, so this AAAAA value points somewhere within those bytes.
Because the characters are stored contiguously, the lower three AAAs point to the byte within a character. This is why we shift the ASCII code three bits left, because the lower three bits are within a character. So for example, to write to character 4, we shift 4 three bits over, which gives us 32, which is the beginning of the fifth character (don't forget character codes begin at zero!).
Once we've told the controller to go to CGRAM, and which byte to go to, we then write the character data to the display, the address pointer auto-increments once you write to the display, so when we write the 8 bytes of character, those bytes are being put in CGRAM location
AAA000 (0)
AAA001 (1)
AAA010 (2)
...
AAA110 (6)
AAA111 (7)
(Where AAA is your character ASCII code)
It isn't possible to make the controller read the custom characters from anywhere but its own 64bytes, so you can't use the arduinos RAM to extend the CGRAM, you're still limited to only 8 custom chars.
I'm not sure if this is what you're after, if not I can try to explain it differently...