- I am walking for more than 2 hours. (Wrong!)
As it stands it is wrong, but add a frequency adverbial and it becomes right.
- I am walking for more than 2 hours every day.
- I have been walking for more than 2 hours. (Correct)
a) It is not better, it is merely the only possibility. b) You do have a time reference, which is "now", when you use the present progressive ("I am walking."). Using the progressive you define the action as having lasted for some time to the present time, still being carried out and supposed to go on for some time in the future. If you use the present perfective you do have a time reference, which is again "now", but you use this tense to define an anterior time zone within which the action takes place; since you use the present this zone extends from some time in the past up to the present.
When you use the present progressive (present continuous) you combine the two aspects in the same verbal phrase, and you have a time reference, which is again "now". However, things are not that simple: the meaning is not entirely predictable from the separate meanings. In this sentence, without more context, it is no possible to say whether the walking goes on after the act of elocution or whether it stopped then.
If you want to insist on what you have been doing before the time present and up to this time, then the present progressive is the solution, whether you go on doing it or not.