If an application transmits UDP packets, it must be prepared that some (or even many) of these packets are dropped.
So either the application must deal with that (e.g. real-time audio or video data, where the missing information is just ignored and causes reduced quality, because you can't resend packages), or it must implement its own protocol to ensure retransmitting, or it must use another protocol that guarantuees eventual delivery.
Implementing an external "just send 2 copies" layer is not the solution. Yes, I know you don't want to hear that, but it's true.
So rewrite the application to use the proper protocol.
Alternatively, tunnel the packets over some other application that implements a proper protocol (tun/tap interface). If you insist on "just duplicate packets" to be a proper protocol (it's not difficult to write such an application, google for tun/tap example programs), try it, and see if it works (it won't).