Simply using M-x term instead of M-x shell or M-x eshell solved my similar problem. The interface is actually better than eshell or shell. For example, for repeating the previous command just need the up key; Auto-completion works smoothly (but editing multi-lines is not as nice as eshell or shell).
I should also add that, for me the solution mentioned above ...
The keybindings created with :bind expect a function name (not sure how lambdas are expanded) so you can define a named function in the :init clause of use-package which should work as expected...
(defun my-clear-shell ()
(message "I am some other function"))