The following code indents flet
like lists. It's not perfect, because the sublist needs to be closed, before it is recognized.
(setq-default lisp-indent-function 'elisp-flet-indent-function)
(defvar elisp-flet-style-macros
(let ((macs '(flet flet* values macrolet labels)))
(append macs (mapcar (lambda (sym)
(intern (format "cl-%s" (symbol-name sym))))
macs))))
(dolist (mac elisp-flet-style-macros)
(put mac 'lisp-indent-function 'defun))
(defun elisp-flet-indent-function (indent-point state)
"Handle `flet'-like lists, otherwise call `lisp-indent-function'."
(cond
((ignore-errors
(save-excursion
(backward-up-list 3)
(down-list)
(when (memq (intern (thing-at-point 'symbol))
elisp-flet-style-macros)
(forward-sexp 2)
(>= (point) indent-point))))
(lisp-indent-defform state indent-point))
(t (lisp-indent-function indent-point state))))