ICU’s rule framework doesn’t work well with source languages that have irregular pronunciation. Sadly, English is particularly hard to pronounce.
Transliteration means emulating the pronunciation of the source language in a target language. This consists of two parts: (a) Converting input to an intermediate representation that indicates the pronunciation; (b) converting the pronunciation to the final output.
With English-to-Urdu, the rule-based ICU framework will never give good results for (a), but it would very likely be a good system for doing (b). I’d recommend running your English strings through a text-to-speech system, or at least looking up the input in a very large pronunciation dictionary. This will give you pronunciations in the International Phonetic Alphabet. Once you have pronunciations, ICU should work reasonably well to generate Urdu.
Now, ICU doesn’t yet have rules for converting the International Phonetic Alphabet to Urdu. As the maintainer of Unicode’s transliteration rules, I think this should be very easy to implement; I’ll gladly do it when I find some time (but anyone is welcome to send patches!) Please file a bug at http://unicode.org/cldr/trac/newticket if you want to go this route.