There are some things C or C++ are just better at, like operating in a low-memory environment when you want to squeeze as much as possible out of the system. Sure, GC is nice and all, but for things to work well with a modern copying generational GC, you need 2 or 3 times the amount of RAM as an equivalent manually managed tool, because collection is lazy and you don't want to run it on every allocation -- that would be too expensive. So garbage sticks around for a little while.
Alternatively, some people like writing in high-level compiled languages (most of which are faster than Java) like OCaml or Haskell, both of which are suitable for a device that would also be running Java.