Why translating a program from one high-level programming language directly into another is difficult?
The task is simple. Here are two naive strategies.
Say we want to compile from A to B.

Pick a language C for which you have a compiler A $\to$ C and an interpreter for $C$ in $B$.
Create a new program in B that includes the compilate (in C) as string and the code of the interpreter.

Compile code in A to machine code or intermediate language. Translate line by line to B.


Both give horrible programs -- but you did not require anything fancy.
The more theoretical answer is: we know that effective (i.e. Turing-computable) compilers exist between any two Turing-complete languages, since such define nothing but an admissible numbering.