Isn't this enough - without GrSnap...
(With your version - ACAD will snap to vertex of block itself if it's nearer insertion point before attempt to snap to other entity/ies in active space causing that insert while (entmod) moves with gaps - not smoothly)... This although insert do not snap, marker is turned on like with ordinary move with turned OSNAPS and insert is placed on marker upon finishing of routine...
Code:
(defun blkins ( blkname / BlkSetExplodability )
(defun BlkSetExplodability ( BlockName Explodability / e ed e330 e330d )
;second argument 0=non-Explodability 1=Explodability
(setq e (tblobjname "BLOCK" BlockName)
ed (entget e)
e330 (cdr (assoc 330 ed))
e330d (entget e330)
e330d (subst (cons 280 Explodability) (assoc 280 e330d) e330d)
);setq
(entmod e330d)
)
(BlkSetExplodability blkname 1)
(vl-cmdf "_.-INSERT" blkname "\\" 1.0 "" 0.0)
(vl-cmdf "_.EXPLODE" "_L")
(vl-cmdf "_.COPYBASE" "_non" (getvar 'lastpoint) "_P" "")
(vl-cmdf "_.ERASE" "_P" "")
(vl-cmdf "_.PASTEBLOCK" "_non" (getvar 'lastpoint))
(vl-cmdf "_.-RENAME" "_BLOCK" (cdr (assoc 2 (entget (entlast)))) (strcat blkname "-" (rtos (getvar 'cdate) 2 6)))
(princ)
)