arduino based pic16F877A programmer
Yes, it is possible.  Is it easy? No.

You have to employ the "low voltage programming" mode (LVP) of the chip, which is enabled by default out of the factory (don't turn it off or you would need a real programmer to turn it on again):


  The LVP bit of the configuration word enables low-voltage ICSP programming. This mode allows the microcontroller to be programmed via ICSP using a
  \$V_{DD}\$ source in the operating voltage range. This only means that \$V_{PP}\$ does not have to be brought to \$V_{IHH}\$ but can instead be left at the normal operating voltage. In this mode, the RB3/PGM pin is dedicated to the programming function and ceases to be a general purpose I/O pin. During programming,\$V_{DD}\$ is applied to the MCLR pin. To enter Programming mode, \$V_{DD}\$ must be applied to the RB3/PGM provided the LVP bit is set. The LVP bit defaults to on (‘1’) from the factory.


So you can use the Uno to send the right serial signals (similar to SPI) to the PIC16 using LVP.

The hard part is getting that serial data right.

DS39589 tells you all about the programming protocol.