It is not normal, but as Mrs Beanbag wrote the programm is responsible for allocating and deallocating its memory. So the coder might forgot it or a bug is responsilbe or other tools/hacks. You can easily check that by yourself. Open a shell and type "avail", start the progamm you want to test, maybe again "avail" in the shell, exit the programm and another "avail". If you compare the memory values you can see if memory is lost. There exists memwatch tools with GUI if you need.
If you a programm loses memory you should write a bugreport to the author. So he/she can fix it.
If a programm uses other resources like e.g. libraries these will load to memory. If the programm don`t close it on exit it will stay in memory. There is an open counter for libs, devices, resources that counts how many programms "use" it. A "avail flush" tries to free memory as much as possible. E.g. an lib has an open couter of 0 then "avail flush" remove it. If counter is 1 or higher then the lib will stay.
IGame uses MUI, hence a lot of memory but I guess that isn`t the problem.