I also was once interested in this question. I got to make a layer of non-removable only Created permanent reactor layer, which can be removed only by software. Of the minuses - you need to constantly download the rector.
command will KEEP_LAY in drawing two layers: "DELME_PLIZ1" "DELME_PLIZ2" and reactors to them.
At least Laydel and Purge they are not removed.
(defun C:KEEP_LAY ( / layer ID keep_list reac lay)
(foreach lay '("DELME_PLIZ1" "DELME_PLIZ2")
(or (tblobjname "layer" lay)
(vla-add (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) lay)
)
(setq layer (vlax-ename->vla-object(tblobjname "layer" lay)))
(setq ID (vla-get-ObjectID layer))
;;;Dictionary KEEP_LAYER '((ID_1 NAME_1) ... (ID_N NAME_N))
;;;where ID_xxx - object ID, returned vla-get-ObjectID
;;; NAME_xxx - Layer Name
(if (null (assoc ID (setq keep_list (vlax-ldata-get "KEEP_LAYER" "DONT_ERASE")))) ;_Íåò â ñïèñêå âå÷íûõ
(progn
(setq reac (VLR-Object-Reactor (list layer) "Delete layer" '((:vlr-erased . dellay))))
(setq keep_list (append keep_list (list (list ID (vla-get-name layer)))))
(princ (strcat "\nLayer " (vla-get-name layer) " protected from deletion"))
(vlax-ldata-put "KEEP_LAYER" "DONT_ERASE" keep_list)
;;; (if (not (vlr-pers-p reac))(vlr-pers reac))
)
)
)
(princ)
)
(defun dellay (vlao reac args / name ID keep_list layer reac)
(setq ID (vla-get-ObjectID vlao))
(if (setq name (assoc ID (setq keep_list (vlax-ldata-get "KEEP_LAYER" "DONT_ERASE")))) ;_â ñïèñêå âå÷íûõ
(progn
(setq name (cadr name))
(setq keep_list (vl-remove (assoc ID keep_list) keep_list))
(setq layer (vla-add (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) name))
(setq ID (vla-get-ObjectID layer))
(setq keep_list (append keep_list (list (list ID (vla-get-name layer)))))
(setq reac (VLR-Object-Reactor (list layer) "Delete layer" '((:vlr-erased . dellay))))
(princ (strcat "\nYou can not delete layer " name))
(vlax-ldata-put "KEEP_LAYER" "DONT_ERASE" keep_list)
;;; (if (not (vlr-pers-p reac))(vlr-pers reac))
)
)
)
(princ "\nType KEEP_LAY to protect layer DELME_PLIZ1 and DELME_PLIZ2")(princ)