The UDP/IP packet headers are used for network and transport purposes. All of your application information should be in the UDP payload. You can put any bytes you want there, using any structure you want. Think of the payload as a very small file which you are passing from one application to another and structure it the same way you would a file. For example, the first byte might be a number indicating the type of data in the rest of the payload. In this way, you create your own application-level header.
Just as with a file, you need to remember that word alignment, byte packing, and endian may not be same on different machines. You are sending a sequence of raw bytes, and need to pay attention to how higher level structures will be converted and interpreted.
In addition, individual UDP datagrams are very limited in size. On most networks you will have problems with payloads much bigger than about 1400 bytes, and it is safest to keep payloads below about 512 bytes.
As always with UDP, remember that you are responsible for all flow control and error recovery. If a packet is lost for any reason, you will receive no notification: it simply fails to arrive. If you send packets too quickly, they will be lost. If you do not intend to implement your own specialized flow control and error recovery, consider using TCP instead.