This has nothing to do with functional languages. This is in fact true for almost all object-oriented languages as well.
Artificially splitting values into two different kinds of things only creates complications, why would you want that?
It is perfectly possible to generate efficient code for arithmetic operations on number objects. In fact, most high-performance OO implementations generate code dealing with primitive native machine number types even for "object numbers". So, if you can generate the same machine code for both cases, but one of the cases is simpler because it doesn't have this artificial split, then it seems obvious what is the better design, doesn't it?
Now, if you want to ask me why the designers of Java made this particular choice, I can't tell you. They certainly should have been aware of the work of the Self team, who after all worked at Sun.
scala.Intcompiles to a primitive on the JVM is an implementation detail. Which is essentially the point I am making in my answer: you can have objects and efficiently compile them nonetheless without having to split them. You can't express the type of monad transformers in Java, but that doesn't mean you can't implement them. You can't express the typeMonadeither, but you can still write monads. BTW, my claim that Scala is no more functional than Java is meant as a compliment. The fact that it looks like it is, is a testament to Odersky's great taste in …