I'd give the “fillin” rules some stretchability:
\documentclass[12pt, a4paper, norsk]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[margin=1in]{geometry}
\usepackage{parskip}
%\newcommand\fjern[1]{\linebreak[2]\underline{\phantom{#1}}}
\newcommand\fjern[1]{%
\sbox0{#1}%
\hspace*{0pt}\leaders\hrule height 0pt depth 1pt\hskip\wd0 plus 2em\relax\mbox{}}
\begin{document}
\section*{Vokabular} % (fold)
\label{sec:vokabular}
{\LARGE Et \fjern{atom} består av \fjern{protoner} og \fjern{nøytroner}
i kjernen, med \fjern{elektroner} som kretser rundt.
\fjern{Protoner} har en positiv ladning, \fjern{nøytroner}
er nøytralt ladet og \fjern{elektroner} har en negativ ladning.\par}
% Print the removed words
\vspace{4em}
\textbf{Sett inn ordene:} atom, protoner, nøytroner, elektroner
% section vokabular (end)
\end{document}

With \hspace*{0pt} the following leaders won't disappear at the start of a line, because they follow glue. The final \mbox{} avoids them disappearing at the end of a line.
Here is a version that automatically shuffles the words. Only limitation: the words should be given all in lowercase; one can think to a not too much invasive syntax for allowing case variations.
\documentclass[12pt, a4paper, norsk]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[margin=1in]{geometry}
\usepackage{parskip}
\usepackage{xparse}
\input{random}
\NewDocumentEnvironment{fillin}{}
{\par\LARGE}
{\par\bigskip\printremoved\par}
\ExplSyntaxOn
\NewDocumentCommand{\fjern}{O{2em}m}
{
\holene_fjern:nn { #1 } { #2 }
}
\NewDocumentCommand{\printremoved}{ }
{
\holene_print_removed:
}
\seq_new:N \l_holene_removed_words_seq
\seq_new:N \l_holene_shuffled_words_seq
\tl_new:N \l_holene_word_tl
\int_new:N \l_holene_random_int
\cs_new_protected:Npn \holene_fjern:nn #1 #2
{
\seq_put_right:Nn \l_holene_removed_words_seq { #2 }
\sbox0{#2}%
\hspace*{0pt}
\leaders\hrule height 0pt depth 1pt\hskip\wd0 plus #1\scan_stop:
\mbox{}
}
\cs_new_protected:Npn \holene_print_removed:
{
\textbf{Sett~inn~ordene:~}
\holene_shuffle:
\seq_use:Nn \l_holene_shuffled_words_seq { ,~ }
}
\cs_new_protected:Npn \holene_shuffle:
{
\int_compare:nF
{ \seq_count:N \l_holene_removed_words_seq = 0 }
{ \holene_get_random: \holene_shuffle: }
}
\cs_new_protected:Npn \holene_get_random:
{
\setrannum { \l_holene_random_int }
{ 1 } { \seq_count:N \l_holene_removed_words_seq }
\tl_set:Nx \l_holene_word_tl
{ \seq_item:Nn \l_holene_removed_words_seq { \l_holene_random_int } }
\seq_remove_all:NV \l_holene_removed_words_seq \l_holene_word_tl
\seq_put_right:NV \l_holene_shuffled_words_seq \l_holene_word_tl
}
\cs_generate_variant:Nn \seq_remove_all:Nn { NV }
\cs_generate_variant:Nn \seq_put_right:Nn { NV }
\ExplSyntaxOff
\begin{document}
\section*{Vokabular} % (fold)
\label{sec:vokabular}
\begin{fillin}
Et \fjern{atom} består av \fjern{protoner} og \fjern{nøytroner}
i kjernen, med \fjern{elektroner} som kretser rundt.
\fjern{protoner} har en positiv ladning, \fjern{nøytroner}
er nøytralt ladet og \fjern{elektroner} har en negativ ladning.
\end{fillin}
% section vokabular (end)
\end{document}
Here's an instance
