diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,25 @@
 # Changelog
 
+## 1.4.0 (2020-07-13)
+
+#### Added
+
+- Headers and their contents can now be tweaked on the caller's end with the new
+  `OrgStyle` field `sectionStyling`.
+
+#### Removed
+
+- The `hrBetweenSections` function has been removed. The same effect can be
+  achieved with a custom `SectionStyling`:
+
+```haskell
+section :: O.SectionStyling
+section depth h b = do
+  h
+  b
+  when (depth == 1) $ hr_ []
+```
+
 ## 1.3.0 (2020-03-24)
 
 #### Changed
diff --git a/lib/Data/Org/Lucid.hs b/lib/Data/Org/Lucid.hs
--- a/lib/Data/Org/Lucid.hs
+++ b/lib/Data/Org/Lucid.hs
@@ -21,6 +21,7 @@
   , defaultStyle
   , TOC(..)
   , Highlighting
+  , SectionStyling
   , codeHTML
   ) where
 
@@ -40,22 +41,21 @@
 
 -- | Rendering options.
 data OrgStyle = OrgStyle
-  { includeTitle      :: Bool
+  { includeTitle    :: Bool
     -- ^ Whether to include the @#+TITLE: ...@ value as an @<h1>@ tag at the top
     -- of the document.
-  , tableOfContents   :: Maybe TOC
+  , tableOfContents :: Maybe TOC
     -- ^ Optionally include a Table of Contents after the title. The displayed
     -- depth is configurable.
-  , bootstrap         :: Bool
+  , bootstrap       :: Bool
     -- ^ Whether to add Twitter Bootstrap classes to certain elements.
-  , highlighting      :: Highlighting
+  , highlighting    :: Highlighting
     -- ^ A function to give @\<code\>@ blocks syntax highlighting.
-  , separator         :: Maybe Char
+  , sectionStyling  :: SectionStyling
+  , separator       :: Maybe Char
     -- ^ `Char` to insert between elements during rendering, for example having
     -- a space between words. Asian languages, for instance, might want this to
     -- be `Nothing`.
-  , hrBetweenSections :: Bool
-    -- ^ Whether to insert an @\<hr\>@ element between top-level sections.
   }
 
 -- | Options for rendering a Table of Contents in the document.
@@ -69,6 +69,10 @@
 -- | A function to give @\<code\>@ blocks syntax highlighting.
 type Highlighting = Maybe Language -> T.Text -> Html ()
 
+-- | A post-processing function to apply to a `Section` to give it extra
+-- formatting. The `Int` is the header depth.
+type SectionStyling = Int -> Html () -> Html () -> Html ()
+
 -- | Include the title and 3-level TOC named @Table of Contents@, don't include
 -- Twitter Bootstrap classes, use no custom syntax highlighting, separate words
 -- with a whitespace character, and don't insert an @\<hr\>@ between major
@@ -80,8 +84,8 @@
   , tableOfContents = Just $ TOC "Table of Contents" 3
   , bootstrap = False
   , highlighting = codeHTML
-  , separator = Just ' '
-  , hrBetweenSections = False }
+  , sectionStyling = \_ a b -> a >> b
+  , separator = Just ' ' }
 
 -- | Convert a parsed `OrgFile` into a full HTML document readable in a browser.
 html :: OrgStyle -> OrgFile -> Html ()
@@ -127,11 +131,14 @@
   traverse_ (sectionHTML os depth) ss
 
 sectionHTML :: OrgStyle -> Int -> Section -> Html ()
-sectionHTML os depth (Section ws _ od) = do
-  heading [id_ $ tocLabel ws] $ paragraphHTML os ws
-  orgHTML' os (succ depth) od
-  when (hrBetweenSections os && depth == 1) $ hr_ []
+sectionHTML os depth (Section ws _ od) = sectionStyling os depth theHead theBody
   where
+    theHead :: Html ()
+    theHead = heading [id_ $ tocLabel ws] $ paragraphHTML os ws
+
+    theBody :: Html ()
+    theBody = orgHTML' os (succ depth) od
+
     heading :: [Attribute] -> Html () -> Html ()
     heading as h = case depth of
       1 -> h2_ as h
diff --git a/org-mode-lucid.cabal b/org-mode-lucid.cabal
--- a/org-mode-lucid.cabal
+++ b/org-mode-lucid.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               org-mode-lucid
-version:            1.3.0
+version:            1.4.0
 synopsis:           Lucid integration for org-mode.
 description:        Lucid integration for org-mode.
 category:           Web
