One would think the purest way is to use a photodiode to drive a transistor, which in turn drives an infrared LED. Let's call it the three parts solution (actually you also need a small series transistor for the LED). This can be done, but it has the disadvantage that everything the photodiode detects gets amplified, including noise it picks up. You don't want that.
OTOH, IR receiver modules are usually tuned to a specific protocol and frequency, but if the used frequencies are close a single receiver may be used. The module includes a filter around the center frequency, which eliminates noise, together with an AGC (Automatic Gain Control) stage, which also helps eliminating unwanted (low level) signals, like the radiation from HF fluorescent lamps. But if no real signal is present the AGC will amplify the incoming noise to a normal signal level. And this noise will be retransmitted. When a real signal is received the AGC's amplification will be adjusted, and the noise will be suppressed, so a real signal will come through properly, despite high noise levels when not transmitting.
So while there will also be a lot of noise picked up and retransmitted by an IR receiver module, just like the three parts solution. The disadvantage of the latter is that it won't suppress the noise if a proper signal is detected. Its advantage is that it's protocol-independent.
As for power, this is a tall order. The three component solution will transmit noise all of the time, and will drain the battery fast. The receiver module contains more electronics, and will draw around 0.5 to 1 mA. Which is also too much to let the battery last six months.
edit
If the power is really premium you may have to stick to a specific protocol and decode the received commands before retransmitting. The \$\mu\$C will consume some power too, but will cause the LED to remain off for most of the time, like up to 99.99%, since it won't transmit noise, just valid commands. It's possible to program the \$\mu\$C to decode multiple protocols, but like I said earlier, they'll have to have close characteristics, like pulse-pause ratio and carrier frequency.
A simple way to debug would be to use an oscilloscpe to compare the difference between the real remote and your Arduino signal.
Either use an IR receiver and scope the results of both Arduino and remote with the same data sent. Or open the remote and scope the lines directly and compare with the Arduino data driving lines. Then adjust your code to make the two identical. As @mpflaga says, the timing between sends is a likely suspect.
Best Answer
I think you worry too much about (in)compatibilities. My guess is that you can just use that TSOP38238 and that it will receive the 870 Hz pulses flawlessly.
To make sending and receiving IR codes more reliable, the sender does not send 870 Hz pulses. Instead when a "1" needs to be sent it sends a 38 kHz signal, when a "0" needs to be sent it sends nothing. This is simple amplitude modulation and the TSOP38238 can decode that, the 870 Hz pulses will reappear at it's output.
Just feed those to your Arduino so that it can decode the 870 Hz pulses into codes.
So no worries, just try it and it will work !