Bitcoin Core can be quite a resource intensive program, since it is verifying all the transactions on the network and downloading all the blocks.
Using something like Java, whose VM can be quite memory greedy or script languages, such as Python, that do not compile to machine code, wouldn't be the right fit.
Right, well designed C++ is what makes it possible to run the Bitcoin client on e.g. Raspberry Pi type machines, as well as other embedded systems such as a point of sale terminals (although a BTC point of sale terminal running Bitcoin would need to be much more powerful than a typical PoS). Bitcoin written in Java or other memory managed languages would push the minimum requirements up far enough that low power computing devices would cope far worse, and possibly make them not viable platforms for running the Bitcoin client altogether.
C would probably slow development down too much. Some may try to make a case for using newer languages like Go or Rust, or more esoteric ones such as Erlang or Haskell. But I think using C++ is probably more widely used than these, and so will attract more contributors and reviewers. C++ is almost certainly the best suited language for the job.