Regarding the „strange feature“ with the encoder, this is just a function of the program that you use to read the encoder. You can edit the IQ_rot.c file to change this (currentVolume = currentVolume + 1;) and re-compile the program with „gcc IQ_rot.c -oIQ_rot -lwiringPi -lasound“
I found another program for the encoder that is easier to use as it can take parameters from the command line, and also allows control of the linear/log nature of adjustment. You may also be able to use your button with this.
This issue can also be tested by adjusting the volume with alsamixer, change the volume with alsamixer and it will stay changed until close to the end of the current song, then it will return to the volume that is set in Jivelite.
The encoder changes the volume but it does not change the slider in Jivelite.
When I change the volume using the encoder the Jivelite slider does not move, however the volume changes and stays set while a song is playing until a few seconds before the end of the song at which time it reverts back to the volume set on the slider in Jivelite.
If I touch the encoder again the volume returns to the that which was previously set by the encoder but again only until a few seconds before the end of the currently playing song.