It's not a big problem to send a container to the player.
The problem is that I don't know how to properly prevent any item movements (without custom GuiScreen).
Overriding Slot.canTakeStack, Container.slotClick and Container.transferStackInSlot results in ghost items, that you was talking about.
This is how i display menu to a player (kinda copy-pasted from EntityPlayerMP.displayGUIChest, but allows me to pass my custom container)
However I still can't understand how to avoid the ghost items.