There's many reasons that software requires more resources.
Choice of language, programming style, add in libraries.
How you add features is very important, do you:
1) Change the architecture of the app, refactor and integrate the new features
or
2) Just bolt it on
Answer 1 will lead to a more efficient system, but it'll take a lot longer to do.
In reality answer 2 is what you'll get pretty much every time.
Backwards compatibility often means option 1 is not an option so in adding features you may end up having to repeat things that are already there.
The availability of cheap fast hardware with oodles of memory means developers simply don't have to care about efficiency, there's so much computing power available you simply won't notice even if something is incredibly inefficient.
I can remember running BeOS with 32MB on my 120MHz desktop quite happily about 10 years ago.
You'll soon see dual core 1GHz phones with 1GB memory.
OTOH Sometimes it's just plain bad coding, in fact there's probably rather a lot of that:
I know of one (well known) application that was ported to mobile devices only to find it ran like a dog. The reason was it was doing some incredibly stupid things that were completely unnecessary. That app had to be rewritten.
This is likely to become more common, the mobile environment is not very forgiving of badly written software.