Inside the first for-loop, the counter is not substituted into the procecedure definition. Currently, its only effect is that the procedure U is (re)defined 6 times. So, you can replace the first for-loop (including its contents) by
U := proc (k, h) options operator, arrow;
eval((diff(u0(x), [`$`(x, k)]))/factorial(k), x = 0)
Inside the second for-loop, something similar happens, but you also get an additional error because now U is defined in terms of itself, without an appropriate stopping condition. So, you can replace the second for-loop (including its contents) by
UU := proc (k, h) options operator, arrow;
(sum(sum(U(r, h-s)*U(k-r, s), s = 0 .. h), r = 0 .. k)+(k+1)*U(k, h))/m
(Note it is now called UU instead of U.) You can then evaluate UU at different arguments using a new for-loop, if you like.