I found the problem. I was just grovelling this ag-cffi::editable slot with the wrong type (the struct type instead of :pointer).
Whereas the following CFFI Lisp, which is supposed to be equivalent, at the REPL does not:
(with-core-and-video (cffi:with-foreign-object (buffer :char 100) (let* ((win (cffi::foreign-funcall "AG_WindowNew" :int 0 :pointer)) (tb (cffi::foreign-funcall "AG_TextboxNew" :pointer win :int 0 :string "box:" :pointer)) (ed (cffi::foreign-slot-value tb 'ag-cffi::textbox 'ag-cffi::editable))) (ag:window-show win) ;; hangs here: (cffi::foreign-funcall "AG_EditableBindUTF8" :pointer ed :pointer buffer :int 100 :void) (cffi::foreign-funcall "AG_EditableSetString" :pointer ed :string "foobar" :void) (cffi::foreign-funcall "AG_EventLoop_FixedFPS" :void))))